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

我有这样的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_idsender列显然不是。

我尝试了这个:

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

pandas DataFrame:根据另一列中的布尔值计算总和 - python

我对Python相当陌生,我尝试在pandas中模拟以下逻辑我目前正在循环抛出行,并希望对前几行的AMOUNT列中的值求和,但只求和最后一次看到的“ TRUE”值。实际数据似乎效率低下(我的数据框大约有500万行)?想知道用Python处理这种逻辑的有效方法是什么?逻辑:逻辑是,如果FLAG为TRUE,我想对前几行的AMOUNT列中的值求和,但只求和最后一次…

Pandas Dataframe:在越来越多的列上循环并计算均值和标准差 - python

基本上,我有一个包含20个属性和一个值的表。我想找到std = 0-(即粒度级别完美允许1:1)所需的最少数量的属性。我想建立一个循环如果使用列名进行硬编码,则看起来像这样:for iter in range(1,21): dfcalc = df.groupby("LINE_NUM")["RATIO"].agg([np…

pandas.DataFrame.replace更改列的dtype - python

因此,我试图用np.nan替换数据框中的None值,并注意到在此过程中,即使数据框中的float列的数据类型不包含任何丢失的数据,它们也都更改为object。举个例子:import pandas as pd import numpy as np data = pd.DataFrame({'A':np.nan,'B':1…

python :安装 python 后,如何导入 Pandas - python

我已经安装了 python 。现在,当我尝试跑步时import pandas as pd 我收到以下错误Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> import pandasFile ImportError: …

Python Pandas检查数据框是否不为空 - python

我有一个if语句,它在其中检查数据框是否为空。我的操作方式如下:if dataframe.empty: pass else: #do something 但实际上我需要:if dataframe is not empty: #do something 我的问题是-是否有一种.not_empty()方法可以实现这一目标?我还想问一下第二个版本在性能方面是否更好…