首页 > 解决方案 > 使用 Groupby 将数据框列放入列表列表

问题描述

一个数据框,我想对其进行转换。

data = {'Number': [536, 578, 36, 468, 86], 
'Content' : ["Banana","Apple","Orange","Mango","Grape"],
'Quantity': [1, 2, 5, 2, 6],
'Origin': ["TX","TX","OP","OP","OP"]}
df = pd.DataFrame(data)

在此处输入图像描述

理想的结果是这样的:

OP    [[36,5,Orange], [86,6,Grape], [468,2,Mango]]
TX             [[536,1,Banana], [578,2,Apple]]

我试过了:

df.groupby(['Origin', 'Number', 'Quantity'])['Content'].apply(list))

还:

df.groupby(['Origin', 'Number', 'Quantity'])'Content'].apply(list)).groupby(level=0).apply(list)

却不敢靠近。

什么是正确的方法?谢谢你。

标签: pythonpandasdataframe

解决方案


你可以做:

df.groupby('Origin').apply(lambda x: x.drop('Origin', axis=1).values.tolist())

输出:

Origin
OP    [[36, Orange, 5], [468, Mango, 2], [86, Grape,...
TX                  [[536, Banana, 1], [578, Apple, 2]]
dtype: object

如果您希望列表以正确的顺序排列,则需要重新排列列。例如:

(df[['Number', 'Quantity', 'Content']]
    .groupby(df['Origin'])
    .apply(lambda x: x.values.tolist())
)

你得到:

Origin
OP    [[36, 5, Orange], [468, 2, Mango], [86, 6, Gra...
TX                  [[536, 1, Banana], [578, 2, Apple]]
dtype: object

推荐阅读