我正在迭代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
答案 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])