我正在努力创建一个函数,该函数可以首先计算特定列(从0行到第n行)中每个字符串的出现次数,然后通过计算从第一行到第n行的value_counts值,将其缩减为一个值。
更准确地说,我想要做的是创建一个新的列‘意思’,其中每一行n的值等于从第一行到第n行的mean的value_counts() 'Name‘。
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'])例如,第6行的平均值应该是1.25,因为Pauline出现了两次,因此计算值应该是(1 +1+1+2+ 1)/5 = 1.25。
谢谢,
发布于 2022-12-03 17:15:31
逻辑不清楚,但假设您想要不断扩展的平均值值,请使用:
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.20https://stackoverflow.com/questions/74668825
复制相似问题