[英]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.