pandas df 中的累计计数
Cumulative count in a pandas df
我正在尝试根据 pandas
df
中的两列导出 cumulative
count
。
下面的 df
就是一个例子。我正在尝试导出基于 Value
和 Count
的 count
。因此,当 count
增加时,我想将其归因于相邻的 value
import pandas as pd
d = ({
'Value' : ['A','A','B','C','D','A','B','A'],
'Count' : [0,1,1,2,3,3,4,5],
})
df = pd.DataFrame(d)
我用过这个:
for val in ['A','B','C','D']:
cond = df.Value.eq(val) & df.Count.eq(int)
df.loc[cond, 'Count_' + val] = cond[cond].cumsum()
如果我将 int
更改为特定数字,它将 return 计数。但是我需要这个来读取任何数字,因为 Count
列不断增加。
我的预期输出是:
Value Count A_Count B_Count C_Count D_Count
0 A 0 0 0 0 0
1 A 1 1 0 0 0
2 B 1 1 0 0 0
3 C 2 1 0 1 0
4 D 3 1 0 1 1
5 A 3 1 0 1 1
6 B 4 1 1 1 1
7 A 5 2 1 1 1
所以 count
增加 second row
所以 1
到 Value A
。 Count
在 row 4
上再次增加,这是 Value C
的第一次,所以 1
。 rows 5
和 7
也一样。 count
在 row 8
上增加,因此 A
变为 2
。
您可以使用 str.get_dummies
和 diff
以及 cumsum
In [262]: df['Value'].str.get_dummies().multiply(df['Count'].diff().gt(0), axis=0).cumsum()
Out[262]:
A B C D
0 0 0 0 0
1 1 0 0 0
2 1 0 0 0
3 1 0 1 0
4 1 0 1 1
5 1 0 1 1
6 1 1 1 1
7 2 1 1 1
这是
In [266]: df.join(df['Value'].str.get_dummies()
.multiply(df['Count'].diff().gt(0), axis=0)
.cumsum().add_suffix('_Count'))
Out[266]:
Value Count A_Count B_Count C_Count D_Count
0 A 0 0 0 0 0
1 A 1 1 0 0 0
2 B 1 1 0 0 0
3 C 2 1 0 1 0
4 D 3 1 0 1 1
5 A 3 1 0 1 1
6 B 4 1 1 1 1
7 A 5 2 1 1 1
我正在尝试根据 pandas
df
中的两列导出 cumulative
count
。
下面的 df
就是一个例子。我正在尝试导出基于 Value
和 Count
的 count
。因此,当 count
增加时,我想将其归因于相邻的 value
import pandas as pd
d = ({
'Value' : ['A','A','B','C','D','A','B','A'],
'Count' : [0,1,1,2,3,3,4,5],
})
df = pd.DataFrame(d)
我用过这个:
for val in ['A','B','C','D']:
cond = df.Value.eq(val) & df.Count.eq(int)
df.loc[cond, 'Count_' + val] = cond[cond].cumsum()
如果我将 int
更改为特定数字,它将 return 计数。但是我需要这个来读取任何数字,因为 Count
列不断增加。
我的预期输出是:
Value Count A_Count B_Count C_Count D_Count
0 A 0 0 0 0 0
1 A 1 1 0 0 0
2 B 1 1 0 0 0
3 C 2 1 0 1 0
4 D 3 1 0 1 1
5 A 3 1 0 1 1
6 B 4 1 1 1 1
7 A 5 2 1 1 1
所以 count
增加 second row
所以 1
到 Value A
。 Count
在 row 4
上再次增加,这是 Value C
的第一次,所以 1
。 rows 5
和 7
也一样。 count
在 row 8
上增加,因此 A
变为 2
。
您可以使用 str.get_dummies
和 diff
以及 cumsum
In [262]: df['Value'].str.get_dummies().multiply(df['Count'].diff().gt(0), axis=0).cumsum()
Out[262]:
A B C D
0 0 0 0 0
1 1 0 0 0
2 1 0 0 0
3 1 0 1 0
4 1 0 1 1
5 1 0 1 1
6 1 1 1 1
7 2 1 1 1
这是
In [266]: df.join(df['Value'].str.get_dummies()
.multiply(df['Count'].diff().gt(0), axis=0)
.cumsum().add_suffix('_Count'))
Out[266]:
Value Count A_Count B_Count C_Count D_Count
0 A 0 0 0 0 0
1 A 1 1 0 0 0
2 B 1 1 0 0 0
3 C 2 1 0 1 0
4 D 3 1 0 1 1
5 A 3 1 0 1 1
6 B 4 1 1 1 1
7 A 5 2 1 1 1