擅长:python、mysql、java
<p>我不确定这有多有效,但你可以试试:</p>
<pre><code>new_df = df.applymap(test).stack()
# replace True with the empty string
new_df = new_df[new_df].replace({True:''}).reset_index(level=0)
# get the tuples
s = new_df.apply(lambda x: tuple(x), axis=1)
# group the tuples by (original) column names and return dict
d = s.groupby(s.index).apply(lambda x: x.tolist()).to_dict()
</code></pre>
<p>输出:</p>
<pre><code>{'x': [(0, '')], 'y': [(0, ''), (1, '')], 'z': [(0, ''), (1, '')]}
</code></pre>
<hr/>
<p>由询问者优化算法。如果直接返回<code>applymap</code>中的正确对象,则不需要替换步骤</p>
<pre><code>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]]
})
new_df = df.applymap(lambda x: None if x == [''] else [''])
new_df = new_df.stack().reset_index(level=0)
s = new_df.apply(lambda x: tuple(x), axis=1)
d = s.groupby(s.index).apply(lambda x: x.tolist()).to_dict()
d
</code></pre>