Python 使用列名检查行列表值

Python 使用列名检查行列表值,python,pandas,Python,Pandas,因此,我有一个数据帧,如: 我想要一个像这样的输出: df1中的行只不过是列名的组合, 只要组合名称与列名匹配,该单元格将设为1,其余为0 你知道如何做到这一点吗 我尝试在每一行中循环,并执行一个字符串包含条件,但有点卡住。这似乎有点老套,但应该可以做到: import numpy as np import pandas as pd df = pd.DataFrame(np.zeros((2, 4)), columns=["a", "b", &quo

因此,我有一个数据帧,如:

我想要一个像这样的输出:

df1中的行只不过是列名的组合, 只要组合名称与列名匹配,该单元格将设为1,其余为0

你知道如何做到这一点吗


我尝试在每一行中循环,并执行一个字符串包含条件,但有点卡住。

这似乎有点老套,但应该可以做到:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.zeros((2, 4)), columns=["a", "b", "c", "d"], index=["a", ["a", "b"]])

pd.DataFrame(df.index.map(lambda l: pd.get_dummies(l, columns=df.columns).agg("sum")).tolist(), index=df.index).fillna(0)


#           a    b
# a       1.0  0.0
# [a, b]  1.0  1.0

我可以用下面的代码来做

df.reset_index(inplace=True)
for i in range(1,len(df.columns)):
    df.iloc[:, i]= df['index'].apply(lambda x: 1 if df.columns[i] in(x) else 0)

df

下面是一种使用
分解
获取虚拟对象
分组比
进行此操作的简单方法(一行代码)

import pandas as pd
df = pd.DataFrame(['a',['a','b'],['a','b','c'], ['b','c','d'], ['b', 'd']])

multihot = pd.get_dummies(df.iloc[:,0].explode()).groupby(level=0).sum()
result = df.join(multihot)

print(result)

只需确保输入df的第一列是包含列表的列。

检查
str.get_dummies(sep=',')
           0  a  b  c  d
0          a  1  0  0  0
1     [a, b]  1  1  0  0
2  [a, b, c]  1  1  1  0
3  [b, c, d]  0  1  1  1
4     [b, d]  0  1  0  1