gpt4 book ai didi

python - 如何添加交错行作为排序/组的结果?

转载 作者:行者123 更新时间:2023-12-02 18:18:20 24 4
gpt4 key购买 nike

我有以下示例输入数据:

import pandas as pd
df = pd.DataFrame({'col1': ['x', 'y', 'z'], 'col2': [1, 2, 3], 'col3': ['a', 'a', 'b']})

我想按 col3 进行排序和分组,同时将摘要交错在 col1 中相应组的顶部,并获得以下输出:

    col1  col2
0 a 3
1 x 1
2 y 2
3 b 3
4 z 3

我当然可以做这个部分:

df.sort_values(by=['col3']).groupby(by=['col3']).sum()

col2
col3
a 3
b 3

但我不确定如何在 col1 之上交错组标签。

最佳答案

对每个组的 top1 行使用自定义函数:

def f(x):
return pd.DataFrame({'col1': x.name, 'col2': x['col2'].sum()}, index=[0]).append(x)

df = (df.sort_values(by=['col3'])
.groupby(by=['col3'], group_keys=False)
.apply(f)
.drop('col3', 1)
.reset_index(drop=True))
print (df)
col1 col2
0 a 3
1 x 1
2 y 2
3 b 3
4 z 3

性能更高的解决方案是使用 GroupBy.ngroup对于索引,按 concat 聚合 sum amd 最后连接值仅通过 mergesort 进行稳定排序:

df = df.sort_values(by=['col3'])

df1 = df.groupby(by=['col3'])['col2'].sum().rename_axis('col1').reset_index()
df2 = df.set_index(df.groupby(by=['col3']).ngroup())

df = pd.concat([df1, df2]).sort_index(kind='mergesort', ignore_index=True).drop('col3', 1)
print (df)
col1 col2
0 a 3
1 x 1
2 y 2
3 b 3
4 z 3

关于python - 如何添加交错行作为排序/组的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71218061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com