我有一个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/