检查pandas行中是否存在值,如果存在,则列在哪些列中

时间:2018-01-11 02:25:49

标签: python pandas dataframe

我正在迭代Pandas DataFrame的行,如下所示:

         col0      col1      col2
0       False     False     False
1       False     False      True
2       False      True     False
3       False      True      True
4        True     False     False
5        True     False      True
6        True      True     False
7        True      True      True
8       False      True      True
9        True      True     False

我希望能够为每一行获取真实列的列号:

所以在这里,输出看起来像:

1 col2
2 col1
3 col1
3 col2
4 col0
5 col0
5 col2
6 col0
6 col1
7 col0
7 col1
7 col2
8 col1
8 col2
9 col0
9 col1

4 个答案:

答案 0 :(得分:3)

使用mul

df.mul(df.columns).replace('',np.nan).stack().reset_index(level=1,drop=True)
Out[122]: 
1    col2
2    col1
3    col1
3    col2
4    col0
5    col0
5    col2
6    col0
6    col1
7    col0
7    col1
7    col2
8    col1
8    col2
9    col0
9    col1
dtype: object

来自piR

df.mul(df.columns).where(df).stack().reset_index(level=1, drop=True)

答案 1 :(得分:3)

使用np.where

i, j = np.where(df)
pd.Series(df.columns[j], df.index[i])

1    col2
2    col1
3    col1
3    col2
4    col0
5    col0
5    col2
6    col0
6    col1
7    col0
7    col1
7    col2
8    col1
8    col2
9    col0
9    col1
dtype: object

答案 2 :(得分:2)

列表理解可以在这里使用列名列表和df值作为列表列表:

outlist = [ [i, df.columns.tolist()[j]]
        for i,r in enumerate(df.values)
        for j,c in enumerate(r)
        if c ]

print(outlist)

输出:

[[1, 'col2'], [2, 'col1'], [3, 'col1'], [3, 'col2'], [4, 'col0'], [5, 'col0'], [5, 'col2'], [6, 'col0'], [6, 'col1'], [7, 'col0'], [7, 'col1'], [7, 'col2'], [8, 'col1'], [8, 'col2'], [9, 'col0'], [9, 'col1']]

答案 3 :(得分:0)

我找到了办法,看起来很难看,但嘿¯\_(ツ)_/¯

for rownumber, values in my_dataframe.iterrows():
    for colnumber, value in enumerate(list(values)):
        if value == True:
            print(rownumber, my_dataframe.columns[colnumber])