python - 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
我怎样才能做到这一点?
解决方案
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
推荐阅读
- android-studio - 我尝试让 android studio(模拟器)与 vs-code 一起工作,但出现错误“Android SDK 中缺少 avdmanager”
- asp.net-core - Masstransit 不使用非 MassTransit 消息
- r - 在R中找到一个字符串并将其替换为其他?
- javascript - 检测激活了哪个 UI 编辑文本
- python - 如何将图像添加到 kivy 应用程序?
- python - 如何从我的数据集中删除已从 KivyMD 的 GUI 中删除的项目
- javascript - 从 javascript 在 Laravel API 中将请求的文件作为空数组获取
- python - 硒中的Chrome内存不足 - 没有抛出错误
- ios - 使用 ApplyFilter 和 CIColorMatrix 过滤器时,表达式类型不明确,没有更多上下文
- javascript - 使用 GAS 重复打印每个数组值