按类别|python数据帧将两列组合为元组的嵌套列表



假设我有一个数据帧: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的基础上组合列AB。如果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

最新更新