我有一个xlsx看起来像这样:
Company N
A 1234;878;3434
A 5678;873
B 539
B 00;123
C 155;741;655
C 5377;454
我正在使用熊猫将其导入到我的程序中,我可以根据他们的公司合并N吗?
期望的结果:{'A': [1234,878,3434,5678,873], 'B': [539, 00, 123], 'C': [155, 741, 655, 5377, 454]}
答案 0 :(得分:2)
groupby并拆分,然后应用列表并转为dict,如:
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()
,所以列表中包含字符串。
答案 1 :(得分:2)
您可以阅读xlsx文件,并使用以下代码将数据框转换为字典
import pandas as pd
xls_dict = xls_data.to_dict('records')
print(xls_dict)
然后,您可以使用以下代码生成所需的输出
output_dict = dict()
for xls_dat in xls_dict:
key_list = list()
if 'N' in xls_dat:
if xls_dat.get('Company') in output_dict:
lis = output_dict.get(xls_dat.get('Company'))
lis2 = [int(i) for i in xls_dat.get('N').split(';')]
output_dict[xls_dat.get('Company')] = lis + lis2
else:
key_list = [int(i) for i in xls_dat.get('N').split(';')]
output_dict[xls_dat.get('Company')] = key_list
输出:
{'A': [1234, 878, 3434, 5678, 873], 'B': [539, 0, 123], 'C': [155, 741, 655, 5377, 454]}