Pandas:计算从第0行到第n行的value_counts()的平均值

68bkxrlz  于 2022-12-10  发布在  其他
关注(0)|答案(1)|浏览(95)

我正在努力创建一个函数,该函数可以首先计算特定列(从第0行到第n行)中每个字符串的出现次数,然后通过计算从第1行到第n行的value_countsmean将其减少为一个单一值。
更准确地说,我想做的是创建一个新列['Mean'],其中每行n的值等于列['Name']的第一行到第n行的value_counts()mean

import pandas as pd
import datetime as dt

data = [["2022-11-1", 'Tom'], ["2022-11-2", 'Mike'], ["2022-11-3", 'Paul'], ["2022-11-4", 'Pauline'], ["2022-11-5", 'Pauline'], ["2022-11-6", 'Mike'], ["2022-11-7", 'Tom'], ["2022-11-8", 'Louise'], ["2022-11-9", 'Tom'], ["2022-11-10", 'Mike'], ["2022-11-11", 'Paul'], ["2022-11-12", 'Pauline'], ["2022-11-13", 'Pauline'], ["2022-11-14", 'Mike'], ["2022-11-15", 'Tom'], ["2022-11-16", 'Louise']]
df = pd.DataFrame(data, columns=['Date', 'Name'])

因此,例如,['Mean']的第6行的值应为1.25,因为Pauline出现了两次,所以计算结果应为(1 + 1 + 1 + 2 + 1)/5 = 1.25。
谢谢你的好意,

8zzbczxx

8zzbczxx1#

逻辑不清楚,但假设您需要扩展的平均值计数,请用途:

df['mean'] = pd.Series(pd.factorize(df['Name'])[0], index=df.index)
                         .expanding()
                         .apply(lambda s: s.value_counts().mean())
                      )

输出量:

Date     Name  mean
0    2022-11-1      Tom  1.00
1    2022-11-2     Mike  1.00
2    2022-11-3     Paul  1.00
3    2022-11-4  Pauline  1.00
4    2022-11-5  Pauline  1.25
5    2022-11-6     Mike  1.50
6    2022-11-7      Tom  1.75
7    2022-11-8   Louise  1.60
8    2022-11-9      Tom  1.80
9   2022-11-10     Mike  2.00
10  2022-11-11     Paul  2.20
11  2022-11-12  Pauline  2.40
12  2022-11-13  Pauline  2.60
13  2022-11-14     Mike  2.80
14  2022-11-15      Tom  3.00
15  2022-11-16   Louise  3.20

相关问题