繁体   English   中英

使用 Groupby 将数据框列放入列表列表

[英]Data-frame columns into list of lists using 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)

却不敢靠近。

什么是正确的方法?

你可以做:

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

Output:

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

你可以做

df.drop('Origin',1).apply(list,1).groupby(df['Origin']).agg(list)
Out[80]: 
Origin
OP    [[36, Orange], [468, Mango], [86, Grape]]
TX                [[536, Banana], [578, Apple]]
dtype: object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM