gpt4 book ai didi

python - ( Pandas )如何计算与以前相同的值出现的频率? (并从中提取一个新的列)

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:26 35 4
gpt4 key购买 nike

我正在寻找一种从我的 Pandas Dataframe 中提取新列的方法,该列显示了当前值与以前相同(没有中断)出现的频率计数

例如从像这样的专栏中出来:

df = pd.DataFrame([10, 10, 23, 23, 9, 9, 9, 10, 10, 10, 10, 12], columns=['RiseOrFall'])

应提取以下列:

0
1
0
1
0
1
2
0
1
2
3
0

几年前用户发布的类似内容:

df = df.groupby(df['RiseOrFall'].ne(df['RiseOrFall'].shift()).cumsum())['RiseOrFall'].value_counts()

Or:

df = df.groupby([df['RiseOrFall'].ne(df['RiseOrFall'].shift()).cumsum(), 'RiseOrFall']).size()

print (df)
values values
1 10 2
2 23 2
3 9 3
4 10 4
5 12 1
Name: values, dtype: int64

但是通过上面的代码,我只显示了该值在一行中出现了多少次的总值,(而不是对它的计数)我需要的应该是一个与“RiseOrFall”列具有相同索引且具有相同行数的列,如下所示:

0
1
0
1
0
1
2
0
1
2
3
0

最佳答案

您可以使用 df.RiseOrFall.ne(df.RiseOrFall.shift()).cumsum()RiseOrFall 列上的每个更改进行分组,然后使用 累计数:

df.assign(Count=df.groupby(df.RiseOrFall.ne(df.RiseOrFall.shift()).cumsum()).cumcount())

    RiseOrFall  Count
0 10 0
1 10 1
2 23 0
3 23 1
4 9 0
5 9 1
6 9 2
7 10 0
8 10 1
9 10 2
10 10 3
11 12 0

注意:请将其分配回去:df=df.assign(....)

关于python - ( Pandas )如何计算与以前相同的值出现的频率? (并从中提取一个新的列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57443288/

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