Pandas - 创建新列,其中的值取自同一数据框中的其他行

Ami*_*ani 3 python dataframe pandas

我有一个DataFrame这样的:

    message_id  reply_to_id     sender
0   1           0               Roozbeh
1   2           1               Amir
2   3           0               Neda
3   4           2               Roozbeh
3   5           2               Neda
Run Code Online (Sandbox Code Playgroud)

如果该消息是对另一条消息的回复,则reply_to_id显示其回复的消息的 ID,否则为0. 现在我想创建另一个列,reply_to_sender在其中显示它所回复的消息的发件人的姓名(如果它不是回复,它可以显示NaN

message_id列是唯一的,reply_to_idsender列显然不是。

我试过这个:

data["reply_to_sender"] = data.loc[data["reply_to_id"] == data["message_id"]]["sender"]
Run Code Online (Sandbox Code Playgroud)

但它显然行不通,因为它查看每一行并执行关系操作。我要做的是查看每一行,然后从其他行中找到发件人的姓名。对于上面的例子,输出需要是这样的:

    message_id  reply_to_id     sender    reply_to_sender
0   1           0               Roozbeh   NaN
1   2           1               Amir      Roozbeh
2   3           0               Neda      NaN
3   4           2               Roozbeh   Amir
3   5           2               Neda      Amir
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

jez*_*ael 5

使用Series.mapSeries通过创建message_idsender

df['reply_to_sender'] = df['reply_to_id'].map(df.set_index('message_id')['sender'])
print (df)
   message_id  reply_to_id   sender reply_to_sender
0           1            0  Roozbeh             NaN
1           2            1     Amir         Roozbeh
2           3            0     Neda             NaN
3           4            2  Roozbeh            Amir
3           5            2     Neda            Amir
Run Code Online (Sandbox Code Playgroud)