[英]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.