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

2024-04-27 03:55:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 程序pandas公司xlsxcompany
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]}

groupby和split,然后应用list并转到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()的用法这里,它用于将列表元素从string转换为int。由于原始数据类型是string,我们执行str.split(),因此列表具有字符串。

相关问题 更多 >