gpt4 book ai didi

python - Pandas 按列和索引邻接对数据框进行分组

转载 作者:行者123 更新时间:2023-11-28 17:31:11 25 4
gpt4 key购买 nike

假设我有以下数据框:

>>> Data=pd.DataFrame()
>>> Data['Color']=['Green','Green','Green','Blue','Blue','Green','Green','Blue','Green','Yellow']
>>> Data['Count']=np.random.randint(0,100,10)
>>> Data
Color Count
0 Green 75
1 Green 53
2 Green 89
3 Blue 66
4 Blue 45
5 Green 98
6 Green 7
7 Blue 28
8 Green 28
9 Yellow 7

如何按“颜色”列和与该列中具有相同值的其他记录相邻形成的组进行分组。例如,我想要的输出类似于以下内容(请注意,应用于“计数”列的函数是任意的,但在本例中我使用了总和)。

              Value
Group Color
0 Blue 111
Green 217
Yellow 7
1 Blue 28
Green 105
2 Green 28

前 3 条记录都具有相同的颜色值,因此在绿色组 0 中。接下来的 2 条记录具有相同的颜色值,因此在蓝色组 0 中。然后还有 2 条绿色记录,这会将它们放入绿色的第 1 组。等等等等

最佳答案

这个有点棘手。 IIUC,你可以这样得到你想要的结果:

>>> df = pd.DataFrame({'Colour': {0: 'Green', 1: 'Green', 2: 'Green', 3: 'Blue', 4: 'Blue', 5: 'Green', 6: 'Green', 7: 'Blue', 8: 'Green', 9: 'Yellow'}, 'Count': {0: 75, 1: 53, 2: 89, 3: 66, 4: 45, 5: 98, 6: 7, 7: 28, 8: 28, 9: 7}})
>>> cid = (df["Colour"] != df["Colour"].shift()).cumsum()
>>> df["Group"] = cid.groupby(df["Colour"]).rank("dense") - 1
>>> df.groupby(["Group", "Colour"]).sum()
Count
Group Colour
0 Blue 111
Green 217
Yellow 7
1 Blue 28
Green 105
2 Green 28

这是有效的,因为 cid 是一个使用 shift-compare-cumsum 模式构建的“连续集群”id。在我们有了cid之后,我们可以将这些cluster ids按颜色分组,然后对它们进行密集排序,得到group ids。

关于python - Pandas 按列和索引邻接对数据框进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34230585/

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