我有以下数据框syntax
:
syntax
我想计算每个用户显示值df1
的频率,并将此值放在新列中。我想得到以下数据框:
id | action |
----|--------|
1 | A |
1 | A |
2 | C |
3 | D |
2 | B |
2 | C |
1 | B |
3 | D |
1 | D |
3 | A |
答案 0 :(得分:2)
首先,您应该添加其他列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
答案 1 :(得分:0)
我找到了一个解决方案,但我不喜欢它:
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
PS我希望会有另一个更优雅的