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) データが含まれています。これらの列の値が true の場合、「Actor」列から「Teacher」列にデータを追加したいと考えています。これまでのところ、これがあります(「マスク」は、データが真である条件を示します。このビットをチェックすると、機能します):
opp_mask = f_acts['Behavior'].str.contains('bp', na=False)
opp_teacher = f_acts[opp_mask]['Recipient1']
1 つの列のみに基づいてこれを行っていた場合、次のようにして、これらの結果をデータフレームの Teacher 列に簡単に挿入できます。
df['Teacher'] = df[opp_mask]['Actor']
しかし、以前の列を上書きせずに、他の 6 つの列のデータを Teacher 列に入力する必要があります。このおもちゃの例のように、これがどのように機能するかについてのアイデアがあります。
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_ 列を 1 つずつチェックすることです。T_ 列の値が true の場合、Actor 列 (T_Opp または T_SocTol 列を参照する場合) または Recipient 列 (T_Enh または T_Dir 列を参照する場合) からデータを取得します。そのデータを現在空の Teacher 列にコピーしたいと考えています。
一度に複数の T_ 列が true になる可能性がありますが、これらの場合、常に同じデータを 2 回 "取得" することになります。(つまり、Actor 列と Recipient 列の両方からのデータは必要ありません。行ごとにどちらか一方のみ)。
そのデータを現在空の Teacher 列にコピーしたいと考えています。