我有一个DataFrame df1,它包含Date、Location和Value的时间序列数据.我尝试使用新列df2创建Relative_Value,该列是特定行的值,除以特定日期上某个位置的值之和(groupby和location)。
例如:
df1:
Date Location Value
0 20220101 FE 4
1 20220101 FE 2
2 20220101 FE 6
3 20220101 FE 4
4 20220101 FE 1
5 20220101 RP 4
6 20220101 RP 6
7 20220101 RP 4
8 20220102 FE 1
9 20220102 FE 3
10 20220102 FE 4
11 20220102 FE 1
12 20220102 RP 8
13 20220102 RP 4
14 20220102 RP 5
15 20220102 RP 9
df2:
Date Location Value Relativ_Value
0 20220101 FE 4 0.235 <-- example
1 20220101 FE 2 0.117
2 20220101 FE 6 0.352
3 20220101 FE 4 0.235
4 20220101 FE 1 0.058
5 20220101 RP 4 0.285
6 20220101 RP 6 0.428
7 20220101 RP 4 0.285
8 20220102 FE 1 0.111
9 20220102 FE 3 0.333
10 20220102 FE 4 0.444
11 20220102 FE 1 0.111
12 20220102 RP 8 0.307
13 20220102 RP 4 0.153
14 20220102 RP 5 0.192
15 20220102 RP 9 0.346我首先通过两列和apply函数进行了分组尝试:
df2 = df1.groupby(['Date', 'Location']).apply(lambda x: x/sum(x))创建df2的有效方法是什么?
可繁殖性:
import pandas as pd
df1 = pd.DataFrame({
'Date':[20220101, 20220101, 20220101, 20220101, 20220101, 20220101, 20220101, 20220101, 20220102, 20220102, 20220102, 20220102, 20220102, 20220102, 20220102, 20220102],
'Location':['FE', 'FE', 'FE', 'FE', 'FE', 'RP', 'RP', 'RP', 'FE', 'FE', 'FE', 'FE', 'RP', 'RP', 'RP', 'RP'],
'Value':[4, 2, 6, 4, 1, 4, 6, 4, 1, 3, 4, 1, 8, 4, 5, 9]})非常感谢!
发布于 2022-10-10 12:32:01
使用GroupBy.transform提高性能:
df2 = df.assign(Relativ_Value=df['Value']
.div(df1.groupby(['Date', 'Location'])['Value'].transform('sum'))https://stackoverflow.com/questions/74014974
复制相似问题