使用Pandas在Python中打印datafreame的列标题

使用Pandas在Python中打印datafreame的列标题,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个输入数据框,如下所示: print (df) Id A B C D 0 101 0 0 0 1 1 102 0 0 0 0 2 103 1 0 1 0 3 104 1 0 1 1 输出:我想打印其中包含“1”的列的列名。输出数据帧应该如下所示。如果1不存在,则应返回空字符串 Id 101- D (4th index) has 1 Id 102- None Id 104- A, C and D which are 1,3,4 ind

我有一个输入数据框,如下所示:

print (df)
    Id  A  B  C  D
0  101  0  0  0  1
1  102  0  0  0  0
2  103  1  0  1  0
3  104  1  0  1  1
输出:我想打印其中包含“1”的列的列名。输出数据帧应该如下所示。如果1不存在,则应返回空字符串

Id 101- D (4th index) has 1
Id 102- None
Id 104- A, C and D which are 1,3,4 indexes
因此,示例输出如下所示:

print (df)
    Id  Result
0  101       D
1  102        
2  103     A,C
3  104   A,C,D
我尝试过此代码,但无效:


df['out']=df.apply(
lambda x:','.join(str(ele)表示[df.column中的ele,如果df.column.values为1,则枚举(x[:])中的df.column.values),
轴=1)
德福
与所有不带第一个的列一起使用矩阵乘法,添加分隔符,最后通过索引删除最后一个字符(分隔符):

df['Result'] = df.iloc[:, 1:].dot(df.columns[1:] + ',').str[:-1]
print (df)
    Id  A  B  C  D Result
0  101  0  0  0  1      D
1  102  0  0  0  0       
2  103  1  0  1  0    A,C
3  104  1  0  1  1  A,C,D
您的解决方案应更改为使用
join
提取匹配索引:

df['Result'] = df.apply(lambda x: ','.join(x.index[1:][x.iloc[1:] == 1]), axis=1)
print (df)
    Id  A  B  C  D Result
0  101  0  0  0  1      D
1  102  0  0  0  0       
2  103  1  0  1  0    A,C
3  104  1  0  1  1  A,C,D
用于矩阵乘法中不带第一个的所有列,添加分隔符,最后通过索引删除最后一个字符(分隔符):

df['Result'] = df.iloc[:, 1:].dot(df.columns[1:] + ',').str[:-1]
print (df)
    Id  A  B  C  D Result
0  101  0  0  0  1      D
1  102  0  0  0  0       
2  103  1  0  1  0    A,C
3  104  1  0  1  1  A,C,D
您的解决方案应更改为使用
join
提取匹配索引:

df['Result'] = df.apply(lambda x: ','.join(x.index[1:][x.iloc[1:] == 1]), axis=1)
print (df)
    Id  A  B  C  D Result
0  101  0  0  0  1      D
1  102  0  0  0  0       
2  103  1  0  1  0    A,C
3  104  1  0  1  1  A,C,D