有效地替换pandas dict中dict列的列值



我想帮助矢量化我的当前代码,任何帮助或注释都会被接受我有一个df,它有一个奇怪的列,它是从一个可用性检查器函数派生而来的,如下所示:

original_df = pd.DataFrame({
'a':['a1', 'a2', 'a3', 'a4'],
'b':['b1', 'b20', 'b98', 'b4'],
'c':[{'a':'not_available', 'b': 'b1'}, {}, {'a':'a3', 'b': 'b98'}, {'a':'not_available', 'b': 'not_available'}],
})
>td style="text align:left;">{'a': 'not_available', 'b': 'b11'}>{}>{'a': 'a3', 'b': 'b98'}>
abc
a1b1
a2b20
a3b98
a4b4{'a': 'not_available', 'b': 'not_available'}

从列c中的dicts创建一个中间数据帧,然后屏蔽不等于not_available的值,并使用fillna填充原始df 中的空值

out = pd.DataFrame([*original_df['c']], original_df.index)
out = out[out == 'not_available'].fillna(original_df)

print(out)
a              b
0  not_available             b1
1             a2            b20
2             a3            b98
3  not_available  not_available
dict_series = original_df[['a', 'b']].apply(lambda x: dict(x), axis=1)
s = original_df['c']
out = s.where(s.astype(bool), dict_series).apply(lambda x: pd.Series(x))

out

a               b
0   not_available   b1
1   a2              b20
2   a3              b98
3   not_available   not_available

最新更新