首页 > 解决方案 > 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

如果消息是对另一条消息的回复,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"]

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

    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

我怎样才能做到这一点?

标签: pythonpandasdataframe

解决方案


Series.mapSeriesmessage_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

推荐阅读