如何基于columnA中的值合并columnB中的值

时间:2019-03-24 16:26:53

标签: python excel python-3.x pandas

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

2 个答案:

答案 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]}