gpt4 book ai didi

python - 按组查找 Pandas 列的列发生了多少次切换

转载 作者:行者123 更新时间:2023-12-05 01:04:50 24 4
gpt4 key购买 nike

我有以下数据框

import pandas as pd
foo = pd.DataFrame({'id': [1,1,1,1,2,2,2,2,3,3,3,3],
'time': [1,2,3,4,1,2,3,4,1,2,3,4],
'cat': ['a', 'a', 'b', 'c',
'a', 'b', 'b', 'b',
'c', 'b', 'c', 'b']
})

我想通过id计算cat从一个time下一个变化了多少次>

所以:

  • 对于id == 1cat从a变为a1次,从a变为b 1 次和 从 b 到 c 1 次
  • 对于id == 2cat改变从a到b1次,从b到b2次
  • 对于id == 3cat 改变从c 到b 2 次,从b 到c 1时间

任何想法我可以如何计算?

理想情况下,输出应如下所示:

pd.DataFrame({'id': [1,2,3],
'a to a': [1,0,0],
'a to b': [1,1,0],
'a to c': [0,0,0],
'b to a': [0,0,0],
'b to b': [0,2,0],
'b to c': [1,0,1],
'c to a': [0,0,0],
'c to b': [0,0,2],
'c to c': [0,0,0]
})

最佳答案

类似于@Anky,我们将在组内使用 shift 来为当前值和下一个值创建标签。然后我们只需要一个crosstab。由于 .str.cat 将使 NaN 不发生变化,并且交叉表忽略它们,我们可以确保我们只计算 组内 转换。

import pandas as pd

s = foo['cat'].str.cat(' to ' + foo.groupby('id')['cat'].shift(-1))
pd.crosstab(foo['id'], s)

cat a to a a to b b to b b to c c to b
id
1 1 1 0 1 0
2 0 1 2 0 0
3 0 0 0 1 2

关于python - 按组查找 Pandas 列的列发生了多少次切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71341171/

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