我在 pandas 中有以下数据框(下面的 df 缩写):
Index: 23253 entries, 7.0 to 30559.0
Data columns (total 17 columns):
Epoch 23190 non-null values
follow 23253 non-null values
T_Opp 245 non-null values
T_Dir 171 non-null values
Teacher 0 non-null values
Activity 23253 non-null values
Actor 23253 non-null values
Recipient1 14608 non-null values
dtypes: float64(10), object(7)
T_Opp 和 T_Dir 之类的列中包含虚拟 (1/0) 数据。当这些列中的值为真时,我想将“演员”列中的数据添加到“教师”列。到目前为止,我有这个(“掩码”给出了数据为真的条件。检查了这个位并且它有效):
opp_mask = f_acts['Behavior'].str.contains('bp', na=False)
opp_teacher = f_acts[opp_mask]['Recipient1']
如果我只基于一列执行此操作,我可以简单地将这些结果插入到数据框中的教师列中,如下所示:
df['Teacher'] = df[opp_mask]['Actor']
但我需要用其他 6 列的数据填充教师列,而不覆盖前面的列。我知道这可能如何工作,类似于这个玩具示例:
list = [1]*len(df.Teacher)
df['Teacher'] = list
但我似乎无法弄清楚如何将上面的“掩码”技术的输出转换为这种方法的正确格式——它具有相同的索引信息,但比我需要添加的数据帧短。我错过了什么?
更新:添加下面的数据以阐明我想要做什么。
follow T_Opp T_Dir T_Enh T_SocTol Teacher Actor Recipient1
7 0 1 0 0 NaN 51608 f
8 0 0 0 0 NaN bla NaN
11 0 0 0 0 NaN 51601 NaN
13 1 0 0 1 NaN f 51602
18 0 0 0 0 NaN f NaN
所以对于这样的数据,我想做的是一次检查一个 T_ 列。如果 T_ 列中的值为真,则从 Actor 列(如果查看 T_Opp 或 T_SocTol 列)或从 Recipient 列(如果查看 T_Enh 或 T_Dir 列)获取数据。我想将该数据复制到当前为空的教师列中。
一次可以有多个 T_ 列为真,但在这些情况下,它总是会“抓取”两次相同的数据。(换句话说,我从不需要来自 Actor 和 Recipient 列的数据。每行只需要一个或另一个)。
我想将该数据复制到当前为空的教师列中。