首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Pandas Dataframe列映射数据,该列的名称在另一列中给出

从Pandas Dataframe列映射数据,该列的名称在另一列中给出
EN

Stack Overflow用户
提问于 2018-07-17 21:17:44
回答 1查看 103关注 0票数 0

我有两个数据文件,并试图将数据从一个数据映射到下一个数据。第一个dataframe以播放器名作为它的索引,将一个player/game作为它的标题。

Dataframe 1:

代码语言:javascript
复制
Date + Game         2015-04-12 PIT@MIL  2015-04-12 SEA@OAK  \
Alcides Escobar                      0                   0
Mike Moustakas                       0                   0
Lorenzo Cain                         0                   0
Eric Hosmer                          0                   0

Dataframe 2:

代码语言:javascript
复制
                   Name         Date + Game
0       Alcides Escobar  2015-04-12 KAN@LAA
1        Mike Moustakas  2015-04-12 KAN@LAA
2          Lorenzo Cain  2015-04-12 KAN@LAA
3           Eric Hosmer  2015-04-12 KAN@LAA
4       Kendrys Morales  2015-04-12 KAN@LAA
5             Alex Rios  2015-04-12 KAN@LAA
6        Salvador Perez  2015-04-12 KAN@LAA

第二个dataframe包含有关播放机的信息,并在两列中包含该播放机的名称和日期/游戏ID。我试图使用以下公式将数据从第一个dataframe映射到第二个数据,根据播放机的名称和ID:

代码语言:javascript
复制
batter_game_logs_df['R vs SP'] = batter_game_logs_df['Name'].map(play_by_play_run_scored_SP_df[batter_game_logs_df['Date + Game']], na_action='ignore').fillna(0)

因为我在第一个dataframe中选择数据的列依赖于第二个dataframe中的日期+游戏列,所以代码会显示一个错误,说明“Dataframe对象不可调用”。如果我手动地用日期/游戏ID替换列引用,它就能工作。例如,

代码语言:javascript
复制
batter_game_logs_df['R vs SP'] = batter_game_logs_df['Name'].map(play_by_play_run_scored_SP_df['2015-04-12 KAN@LAA'], na_action='ignore').fillna(0)

有谁知道我如何能够在第二个dataframe中创建一个链接第一个数据的列吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 23:29:44

如果我正确理解您的意图,更合适的示例数据集是:

df1

代码语言:javascript
复制
       Date + Game  2015-04-12 PIT@MIL  2015-04-12 KAN@LAA
0  Alcides Escobar                   1                   5
1   Mike Moustakas                   2                   6
2     Lorenzo Cain                   3                   7
3      Eric Hosmer                   4                   8

df2

代码语言:javascript
复制
              Name         Date + Game
0  Alcides Escobar  2015-04-12 PIT@MIL
1   Mike Moustakas  2015-04-12 PIT@MIL
2     Lorenzo Cain  2015-04-12 KAN@LAA
3      Eric Hosmer  2015-04-12 KID@MIT
4      Eric Hosmer  2015-04-12 KAN@LAA

无论如何,关键是将“宽”数据(df1)映射为“高”数据(df2)。为了实现这一点,我将首先使用"wide“dataframe (df1)创建一个"tall”数据wide,并将其合并到另一个"tall“dataframe (df2)。

代码:

代码语言:javascript
复制
# derive "df2-like" dataframe using df1
df1 = (df1.rename(columns={'Date + Game': 'Name'})
       .set_index('Name')
       .stack()
       .reset_index()
       .rename(columns={'level_1': 'Date + Game', 0: 'R vs SP'})
      )

# merge 2 dataframes
df2 = df2.merge(df1, on=['Name', 'Date + Game'], how='left').fillna(0)

输出(df2):

代码语言:javascript
复制
              Name         Date + Game  R vs SP
0  Alcides Escobar  2015-04-12 PIT@MIL     1.0
1   Mike Moustakas  2015-04-12 PIT@MIL     2.0
2     Lorenzo Cain  2015-04-12 KAN@LAA     7.0
3      Eric Hosmer  2015-04-12 KID@MIT     0.0
4      Eric Hosmer  2015-04-12 KAN@LAA     8.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51390323

复制
相关文章

相似问题

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