我有一个xlsx看起来像这样:

Company    N
A          1234;878;3434
A          5678;873
B          539
B          00;123
C          155;741;655
C          5377;454

我正在使用pandas将它导入到我的程序中,我可以根据他们的公司合并N吗?
期望结果:{'A': [1234,878,3434,5678,873], 'B': [539, 00, 123], 'C': [155, 741, 655, 5377, 454]}

最佳答案

groupby和split,然后应用list并转到dict-like:

import itertools
(df.groupby('Company').apply(lambda x:
 list(map(int,itertools.chain.from_iterable(x['N'].str.split(';'))))).to_dict())

{'A': [1234, 878, 3434, 5678, 873],
 'B': [539, 0, 123],
 'C': [155, 741, 655, 5377, 454]}

您也可以使用sum来浓缩列表,但不建议用于大数据(它有性能问题,最好使用itertools)
编辑以从列表中切片2个元素使用:
import itertools
(df.groupby('Company').apply(lambda x:
 list(map(int,[k[:2] for k in itertools.chain.from_iterable(x['N'].str.split(';'))]))).to_dict())

这将输出:
{'A': [12, 87, 34, 56, 87], 'B': [53, 0, 12], 'C': [15, 74, 65, 53, 45]}

注意这里使用的map(),它用于将列表元素从字符串转换为int。由于原始的dtype是一个字符串,我们执行str.split(),所以列表有字符串。

关于python - 如何基于列中的值合并列中的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55325953/

10-09 15:10