我想帮助矢量化我当前的代码,任何帮助或评论是appreciated我有一个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'}],
})
| 项目a| b.人口基金|(c)秘书长的报告|
| - ------| - ------| - ------|
| a1| b1|第一个月|
| a2|硼20| {}
|
| a3| b98| {'a': 'a3', 'b': 'b98'}
|
| a4| b4| {'a': 'not_available', 'b': 'not_available'}
|
我想基于列c
的字典来转换列a
和b
。因此,得到的DF看起来像这样:
desired_df = pd.DataFrame({
'a':['not_available', 'a2', 'a3', 'not_available'],
'b':['b1', 'b20', 'b98', 'not_available']})
| 项目a| b.人口基金|
| - ------| - ------|
| 不可用|b1|
| a2|硼20|
| a3| b98|
| 不可用|不可用|
注意事项:如果c
列中的dict为空,则保留其他列中的值。c
的dict中的值只能是其他列或not_available
中的当前值。
for idx, row in original_df.iterrows():
for key, value in row.c.items():
original_df.loc[idx, key] = value
这是一个下采样场景,dict包含8列,df通常有20 - 60行。
这是我当前的代码,它可以工作,但速度非常慢。这段代码用在一个API中,我的分析器告诉我,这个函数消耗的累积时间最长。这是有意义的,因为我正在迭代所有的东西,我希望得到一些帮助!
Shubams的答案已经让这个函数从20秒变成了0. 208秒,谢谢!
2条答案
按热度按时间q1qsirdb1#
根据列
c
中的指令创建中间 Dataframe ,然后屏蔽不等于not_available
的值,并使用fillna填充原始df中的空值t9eec4r02#
第一个月