我正在使用apply()现有 DataFrame 的值构造一系列元组。我需要构造元组中值的特定顺序,并将NaN除一列之外的所有列替换为'{}'.
以下函数可以产生所需的结果,但执行速度相当慢:
def build_insert_tuples_series(row):
# Here I attempt to handle ordering the final tuple
# I must also replace NaN with "{}" for all but v2 column.
vals = [row['v2']]
row_sans_v2 = row.drop(labels=['v2'])
row_sans_v2.fillna("{}", inplace=True)
res = [val for val in row_sans_token]
vals += res
return tuple(vals)
def generate_insert_values_series(df):
df['insert_vals'] = df.apply(lambda x: build_insert_tuples_series(x), axis=1)
return df['insert_vals']
原始数据帧:
id v1 v2
0 1.0 foo quux
1 2.0 bar foo
2 NaN NaN baz
调用时产生的数据帧generate_insert_values_series(df):
最终元组的顺序逻辑是 (v2, ..all_other_columns..)
id v1 v2 insert_vals
0 1.0 foo quux (quux, 1.0, foo)
1 2.0 bar foo (foo, 2.0, bar)
2 NaN NaN baz (baz, {}, {})
计时函数以生成结果数据帧:
%%timeit
generate_insert_values_series(df)
100 loops, best of 3: 2.69 ms per loop
我觉得可能有一种方法可以更有效地构建系列,但不确定如何使用矢量化或其他方法来优化操作。
温温酱
莫回无
MYYA
相关分类