我有两个数据文件,并试图将数据从一个数据映射到下一个数据。第一个dataframe以播放器名作为它的索引,将一个player/game作为它的标题。
Dataframe 1:
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 0Dataframe 2:
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:
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替换列引用,它就能工作。例如,
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中创建一个链接第一个数据的列吗?
发布于 2018-07-17 23:29:44
如果我正确理解您的意图,更合适的示例数据集是:
df1
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 8df2
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)。
代码:
# 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):
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.0https://stackoverflow.com/questions/51390323
复制相似问题