Pandas 数据框,检查列中的列表以及不同列中的设置值

kop*_*man 5 python list dataframe pandas

我需要您的帮助来完成以下任务:我有以下数据框:

test = {'Col1':[2,5],
        'Col2':[5,7],
        'Col_List':[['One','Two','Three','Four','Five'], ['Two', 'Four']],
       'One':[0,0],
       'Two':[0,0],
       'Three':[0,0],
       'Four':[0,0],
       'Five':[0,0],}

df=pd.DataFrame.from_dict(test)
df
Run Code Online (Sandbox Code Playgroud)

看起来像:

第 1 列 第2栏 列列表
2 5 [一二三四五] 0 0 0 0 0
5 7 [二、四] 0 0 0 0 0

我需要检查列表Col_List并根据列表中的项目设置Col1特定列中的列值(OneTwoThreeFourFive

现在我想要得到以下结果:

第 1 列 第2栏 列列表
2 5 [一二三四五] 2 2 2 2 2
5 7 [二、四] 0 5 0 5 0

Mus*_*dın 3

exploded = df.explode("Col_List")

df.update(pd.get_dummies(exploded["Col_List"])
            .mul(exploded["Col1"], axis="rows")
            .groupby(level=0).sum())
Run Code Online (Sandbox Code Playgroud)
  • 将列表的元素分解为自己的行
  • 获取“一”、“二”等的 1-hot 表示。
  • 将其与(分解的)“Col1”值相乘
    • 1/0 值将充当选择器
  • 然后撤消爆炸:groupby & sum
  • 最后用这个更新原始框架的“一”,“二”......列

要得到

>>> df

   Col1  Col2                       Col_List  One  Two  Three  Four  Five
0     2     5  [One, Two, Three, Four, Five]    2    2      2     2     2
1     5     7                    [Two, Four]    0    5      0     5     0
Run Code Online (Sandbox Code Playgroud)