我有带列的数据:日期、人员ID、标签(真/假(
date personId label
-----------------------------
2022-07-20 1023 False
2022-07-30 1023 False
2022-08-05 1023 True
2022-09-11 1001 False
...
有些行可能没有True标签,有些行则没有False标签。需要处理NaN值,将其视为0。
需要通过python中数据帧中的唯一personId计算relative_frequency=count(True(/count(True+False(。
我尝试了分组("personId"(,但没有完全按照我想要的方式。我正在寻找一种简单、干净的方式来写这篇文章。
这样做,使用pandas.groupby
,然后对这些计数进行后处理。
from collections import defaultdict
import pandas as pd
data = [
['2022-07-20', 1, False],
['2022-07-22', 2, False],
['2022-07-24', 1, True],
['2022-08-02', 2, False],
['2022-08-04', 1, False],
['2022-08-06', 2, True],
['2022-08-08', 1, False],
]
df = pd.DataFrame( data, columns=['date','personId','label'])
print(df)
df1 = df.groupby(['personId','label']).count()
data = {}
for row in df1.iterrows():
person,label = row[0]
if person not in data:
data[person] = [0,0]
data[person][label] = row[1]['date']
print()
for k,v in data.items():
print( k, "freq:", v[1]/(v[0]+v[1]) )
输出:
date personId label
0 2022-07-20 1 False
1 2022-07-22 2 False
2 2022-07-24 1 True
3 2022-08-02 2 False
4 2022-08-04 1 False
5 2022-08-06 2 True
6 2022-08-08 1 False
1 freq: 0.25
2 freq: 0.3333333333333333