首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按两个不同列的组创建相对值列

按两个不同列的组创建相对值列
EN

Stack Overflow用户
提问于 2022-10-10 12:30:09
回答 1查看 22关注 0票数 1

我有一个DataFrame df1,它包含DateLocationValue的时间序列数据.我尝试使用新列df2创建Relative_Value,该列是特定行的值,除以特定日期上某个位置的值之和(groupby和location)。

例如:

  • Date=20220101,Location=FE,Value=4: 4/(4+2+6+4+1) = 0.235

代码语言:javascript
复制
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函数进行了分组尝试:

代码语言:javascript
复制
df2 = df1.groupby(['Date', 'Location']).apply(lambda x: x/sum(x))

创建df2的有效方法是什么?

可繁殖性:

代码语言:javascript
复制
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]})

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-10 12:32:01

使用GroupBy.transform提高性能:

代码语言:javascript
复制
df2 = df.assign(Relativ_Value=df['Value']
                        .div(df1.groupby(['Date', 'Location'])['Value'].transform('sum'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74014974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档