Вероятно, есть более разумный способ сделать это, но он выполняет свою работу:
>>> df = pd.DataFrame({'x': [True, False], 'y': [True, True], 'z': [True, True]})
>>> df
x y z
0 True True True
1 False True True
>>> d = {}
>>> for column in df.columns:
...: d[column] = []
...: for index, value in enumerate(column):
...: if value == True:
...: d[column].append((index, ['']))
...:
>>> d
{'x': [(0, [''])], 'y': [(0, ['']), (1, [''])], 'z': [(0, ['']), (1, [''])]}
Алгоритм улучшен спрашивающим
import pandas as pd
import numpy as np
df = pd.DataFrame({
'x': [[0] * 6, ['']],
'y': [[0, np.nan, 0, 1, 0, 1], [4, 3, 5]],
'q': [[''], ['']],
'z': [[5, 5, 5, 4, 4, 4], [65, 324, 45.345]]
})
def test(ar):
if ar == ['']:
return False
else:
return True
new_df = df.applymap(test)
d = {}
for column in new_df.columns:
s = new_df[column][new_df[column] == True]
if s.size >= 1:
d[column] = []
for index, value in enumerate(s):
if value == True:
d[column].append((index, ['']))
d