[英]Frequency that a value occurs in a data frame using pandas
我有以下数据框df1
:
id | action |
----|--------|
1 | A |
1 | A |
2 | C |
3 | D |
2 | B |
2 | C |
1 | B |
3 | D |
1 | D |
3 | A |
我想计算每个用户执行值action
的频率,然后将此值放在新列中。 我想获得以下数据框:
id | action=A | action=B | action=C |
----|----------|----------|----------|
1 | 2 | 1 | 0 |
2 | 0 | 1 | 2 |
3 | 1 | 0 | 0 |
首先,您应该添加其他列Count
,其值为1
df['Count'] = 1
df
id action Count
0 1 A 1
1 1 A 1
2 2 C 1
3 3 D 1
4 2 B 1
5 2 C 1
6 1 B 1
7 3 D 1
8 1 D 1
9 3 A 1
然后,您可以使用pivot_table()
获得所需的结果。
df.pivot_table('Count', index='id', columns='action', aggfunc='sum', fill_value=0)
action A B C D
id
1 2 1 0 1
2 0 1 2 0
3 1 0 0 2
我找到了一种解决方案,但我不喜欢它:
import six
import numpy as np
import pandas as pd
data = """\
id action
1 A
1 A
2 C
3 D
2 B
2 C
1 B
3 D
1 D
3 A
"""
df = pd.read_csv(six.StringIO(data), sep='\s+')
print(df)
pvt = df.pivot(columns='action', values='id')
pvt['id'] = df['id']
print(pvt.groupby('id').count().reset_index().to_string(index=False))
输出:
id action
0 1 A
1 1 A
2 2 C
3 3 D
4 2 B
5 2 C
6 1 B
7 3 D
8 1 D
9 3 A
id A B C D
1 2 1 0 1
2 0 1 2 0
3 1 0 0 2
附言:我希望会有另一个更优雅的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.