根据personId计算相对频率



我有带列的数据:日期、人员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

最新更新