【问题标题】:Python match a column name based on a column value in another dataframePython根据另一个数据框中的列值匹配列名
【发布时间】:2021-05-06 00:59:36
【问题描述】:

抱歉,如果这是某种重复,我查看了 20 个不同的问题,但没有一个对我有帮助。如果有人能指出我回答这个问题的问题,我很乐意删除我的问题。

我有两个数据框,第一个称为 df_full 各种列的长列表,其中一个称为 'Industry' 并具有各种行业的字符串。 df_full['Industry'].head() 是:

INDEX Industry
0 Service
1 Service
2 Trade
3 Service
4 Manufacturing

我的第二个数据框称为 df_industry,并具有基于每个行业的分位数。 df_industry['profit_sales'] 是:

Industry
Financial 0.25 0.025616
0.50 0.219343
0.75 0.410408
Manufacturing 0.25 -0.012373
0.50 0.002032
0.75 0.010331
Service 0.25 -0.012660
0.50 0.003375
0.75 0.064102
Trade 0.25 -0.102178
0.50 0.001715
0.75 0.018705
Transport 0.25 -0.042755
0.50 -0.042755
0.75 0.056487

我正在尝试为我的第一个数据框创建一个新列,根据列行业的行业,分位数为 0.5。

因此我的新输出表应如下所示,df_full[['Industry','quantile_05']].head()

INDEX Industry quantile_05
0 Service 0.003375
1 Service 0.003375
2 Trade 0.001715
3 Service 0.003375
4 Manufacturing 0.002032

我目前尝试无济于事: df_full['quantile_05'] = df_full.apply(lambda x: df_industry['profit_sales'][df_full['Industry'][x]][0.5] ,axis=1)

【问题讨论】:

  • 过滤您的 df_industry,使您只有 0.5 行,重命名并加入。如果您发布数据,您可能会得到更明确的答案。

标签: python pandas match


【解决方案1】:

看起来你可以做一张地图:

df_full['quantile_05'] = df_full['Industry'].map(df_industry['profit_sales'].unstack()[0.5])

输出:

             Industry  quantile_05
INDEX                             
0             Service     0.003375
1             Service     0.003375
2               Trade     0.001715
3             Service     0.003375
4       Manufacturing     0.002032

如果您想要所有三个分位数,您可以按照 Kyle 的建议执行 merge

df_full.merge(df_industry['profit_sales'].unstack(),
          left_on=['Industry'], 
          right_index=True,
          how='left')

输出:

             Industry      0.25       0.5      0.75
INDEX                                              
0             Service -0.012660  0.003375  0.064102
1             Service -0.012660  0.003375  0.064102
2               Trade       NaN  0.001715  0.018705
3             Service -0.012660  0.003375  0.064102
4       Manufacturing -0.012373  0.002032  0.010331

【讨论】:

  • 哇,不知何故我错过了你可以给一个系列(或字典)来映射,好建议。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 2020-04-11
  • 2020-05-23
  • 1970-01-01
  • 2019-03-23
  • 2020-12-10
  • 2017-02-10
  • 1970-01-01
相关资源
最近更新 更多