假设我有一个数据帧:df = pd.DataFrame({"cat":['a', 'a', 'b', 'c'],"A":[5, 6, 1, 4],"B":[7,8, 12, 5]})
它看起来像这样:
cat A B
0 a 5 7
1 a 6 8
2 b 1 12
3 c 4 5
现在我想在列cat的基础上组合列A和B。如果row['cat']
相同,则将row['A']
和row['B']
组合为元组列表。所以上面的例子想要的输出是:[[(5, 7), (6, 8)], [(1, 12)], [(4, 5)]]
有人知道怎么做吗?
x = df.groupby('cat').apply(lambda x: list(zip(x['A'], x['B'])))
这给了你一系列这样的表格:
cat
a [(5, 7), (6, 8)]
b [(1, 12)]
c [(4, 5)]
dtype: object
您可以执行x.to_list()
以获得类似示例输出中的列表。
您可以首先聚合为元组,然后列出:
(df[['A', 'B']].agg(tuple, axis=1)
.groupby(df['cat']).agg(list)
#.to_list() # uncomment for a list
)
输出:
cat
a [(5, 7), (6, 8)]
b [(1, 12)]
c [(4, 5)]
dtype: object