Python 如何为列表中的几个列填充数据框的值?

Python 如何为列表中的几个列填充数据框的值?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一张名单 labels = [['A','B','D','E'], ['G','J','H'],['C','H']] 我有一个数据框 abcdeghj 楠楠楠楠楠楠楠楠 Df=nannannannan 楠楠楠楠楠楠楠楠 我希望一次只取一个列表,对照Df中的列名检查其值,如果列名与列表中的字符串匹配,则用值1填充其单元格,否则填充0 预期产出: abcdeghj 1 1 0 1 1 0 0 0 Df=0 0 0 1 1 1 0 0 1

我有一张名单

labels = [['A','B','D','E'], ['G','J','H'],['C','H']]
我有一个数据框

abcdeghj
楠楠楠楠楠楠楠楠
Df=nannannannan
楠楠楠楠楠楠楠楠
我希望一次只取一个列表,对照Df中的列名检查其值,如果列名与列表中的字符串匹配,则用值1填充其单元格,否则填充0

预期产出:

abcdeghj
1    1    0    1    1    0    0    0 
Df=0 0 0 1 1 1
0    0    1    0    0    0    1    0
如果选择第一个列表,则必须根据上述条件填充Df的第一行。类似地,第二个列表应该填充Df的第二行

import pandas as pd

labels = [['A','B','D','E'], ['G','J','H'],['C','H']]
unique = set(x for l in labels for x in l)

data = []
for item in labels:
    raw = {}
    for value in unique:
        if value in item:
            raw[value] = 1
        else:
            raw[value] = 0
    data.append(raw)

df = pd.DataFrame.from_dict(data)
df = df.reindex(sorted(df.columns), axis=1)
输出:

   A  B  C  D  E  G  H  J
0  1  1  0  1  1  0  0  0
1  0  0  0  0  0  1  1  1
2  0  0  1  0  0  0  1  0
   A  B  C  D  E  G  H  J
0  1  1  0  1  1  0  0  0
1  0  0  0  0  0  1  1  1
2  0  0  1  0  0  0  1  0
这里有一个粗略的方法:

for row, col in enumerate(labels):
    df.loc[row,col] = 1
print(df.fillna(0).astype(int))
输出:

   A  B  C  D  E  G  H  J
0  1  1  0  1  1  0  0  0
1  0  0  0  0  0  1  1  1
2  0  0  1  0  0  0  1  0
   A  B  C  D  E  G  H  J
0  1  1  0  1  1  0  0  0
1  0  0  0  0  0  1  1  1
2  0  0  1  0  0  0  1  0

您可以对此使用列表理解,并迭代标签

[df.set_value(i,x,1)  for i,x in enumerate(labels)]    
df.fillna(0).astype('int8')
输出

    A   B   C   D   E   G   H   J
0   1   1   0   1   1   0   0   0
1   0   0   0   0   0   1   1   1
2   0   0   1   0   0   0   1   0

看起来您已经花了一些时间了解数据,但没有时间提出解决方案-您能分享您认为的解决方案可能是什么样的,或者您已经尝试过的一些代码吗?因此,它不是要求人们编写您的代码,而是帮助您解决您编写的代码可能遇到的问题,或者您不理解的问题。