首页 > 解决方案 > Python Pandas 将值分组为 2 列

问题描述

如下所示的数据框。名称分为 5 组,由 A 列中的常见链接。

我想对名称进行分组。我试过了:

import pandas as pd

data = {'A': ["James","James","James","Edward","Edward","Thomas","Thomas","Jason","Jason","Jason","Brian","Brian"], 
'B' : ["John","Michael","William","David","Joseph","Christopher","Daniel","George","Kenneth","Steven","Ronald","Anthony"]}
df = pd.DataFrame(data)

df_1 = df.groupby('A')['B'].apply(list)
df_1 = df_1.to_frame().reset_index()

for index, row in df_1.iterrows():
    print (row['A'], row['B'])

输出是:

('Brian', ['Ronald', 'Anthony'])
('Edward', ['David', 'Joseph'])
('James', ['John', 'Michael', 'William'])
('Jason', ['George', 'Kenneth', 'Steven'])
('Thomas', ['Christopher', 'Daniel'])

但我希望每个组都有一个列表(如果有一种自动方法为每个列表分配一个变量会更好),例如:

['Brian', 'Ronald', 'Anthony']
['Edward', 'David', 'Joseph']
['James', 'John', 'Michael', 'William']
['Jason', 'George', 'Kenneth', 'Steven']
['Thomas', 'Christopher', 'Daniel']

我试过row['B'].append(row['A'])但它返回None

将它们分组的正确方法是什么?谢谢你。

标签: pythonpython-3.xpandasdataframe

解决方案


您可以A在属性中添加分组列的GroupBy.apply.name

s = df.groupby('A')['B'].apply(lambda x: [x.name] + list(x))
print (s)
A
Brian             [Brian, Ronald, Anthony]
Edward             [Edward, David, Joseph]
James      [James, John, Michael, William]
Jason     [Jason, George, Kenneth, Steven]
Thomas       [Thomas, Christopher, Daniel]
Name: B, dtype: object

推荐阅读