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_id和sender列显然不是。
我试过这个:
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)
我怎样才能做到这一点?
使用Series.map与Series通过创建message_id和sender:
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)