Python 使用列名检查行列表值
因此,我有一个数据帧,如: 我想要一个像这样的输出: df1中的行只不过是列名的组合, 只要组合名称与列名匹配,该单元格将设为1,其余为0 你知道如何做到这一点吗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
我尝试在每一行中循环,并执行一个字符串包含条件,但有点卡住。这似乎有点老套,但应该可以做到:
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