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

我有一个列表列表,


labels = [['A','B','D','E'], ['G','J','H'],['C','H']]

我有一个数据框


          A    B    C    D    E    G    H    J

         NAN  NAN  NAN  NAN  NAN  NAN  NAN  NAN

  Df =   NAN  NAN  NAN  NAN  NAN  NAN  NAN  NAN

         NAN  NAN  NAN  NAN  NAN  NAN  NAN  NAN   

我想一次取一个列表,并根据 Df 中的列名检查它的值,如果列名与列表中的字符串匹配,则用值 1 填充其单元格,否则填充 0。


预期输出:


          A    B    C    D    E    G    H    J

          1    1    0    1    1    0    0    0 

  Df =    0    0    0    0    0    1    1    1

          0    0    1    0    0    0    1    0

如果选择第一个列表,则必须根据上述条件填充 Df 的第一行。同样,第二个列表应该填充 Df 的第二行。


白衣非少年
浏览 113回答 3
3回答

阿晨1998

这是一个粗略的方法:for row, col in enumerate(labels):    df.loc[row,col] = 1print(df.fillna(0).astype(int))输出:   A  B  C  D  E  G  H  J0  1  1  0  1  1  0  0  01  0  0  0  0  0  1  1  12  0  0  1  0  0  0  1  0

慕桂英3389331

您可以为此使用列表推导并遍历标签[df.set_value(i,x,1)  for i,x in enumerate(labels)]    df.fillna(0).astype('int8')输出    A   B   C   D   E   G   H   J0   1   1   0   1   1   0   0   01   0   0   0   0   0   1   1   12   0   0   1   0   0   0   1   0

摇曳的蔷薇

import pandas as pdlabels = [['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  J0  1  1  0  1  1  0  0  01  0  0  0  0  0  1  1  12  0  0  1  0  0  0  1  0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python