3

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 列にコピーしたいと考えています。

4

1 に答える 1