gpt4 book ai didi

python - 如何根据字典有效地填充数据框的列

转载 作者:行者123 更新时间:2023-12-05 08:45:17 27 4
gpt4 key购买 nike

我有这样的数据框和字典

import pandas as pd
import numpy as np

df = pd.DataFrame({
'A': [1, 1, 1, 2, 2, 3, 3, 3, 3],
'ignore_me': range(9),
'fill_me': [np.nan] * 9
})

di = {
1: ['a', 'b'],
2: ['c', 'd'],
3: ['e', 'f', 'g']
}

A ignore_me fill_me
0 1 0 NaN
1 1 1 NaN
2 1 2 NaN
3 2 3 NaN
4 2 4 NaN
5 3 5 NaN
6 3 6 NaN
7 3 7 NaN
8 3 8 NaN

dfA中的条目对应于di中的键。我现在想使用 di 的值填充 fill_me 列,所以我想要的结果如下所示:

   A  ignore_me fill_me
0 1 0 a
1 1 1 b
2 1 2 NaN
3 2 3 c
4 2 4 d
5 3 5 e
6 3 6 f
7 3 7 g
8 3 8 NaN

实现此目的的一种方法如下:

df_list = []
for key, values in di.items():
temp_df = df[df['A'] == key].reset_index(drop=True)
fill_df = pd.DataFrame({'A': [key]* len(values), 'fill_me': values})
df_list.append(temp_df.combine_first(fill_df))

final_df = pd.concat(df_list, ignore_index=True)

这给了我想要的结果。但是,它需要循环、concat 并创建一个新的数据帧。有没有人看到更直接的实现方式?理想情况下,我可以使用 fillnamap 的智能方式“只是”填充 df

最佳答案

您可以通过 cumcount 创建 key

s = pd.Series(di).explode().reset_index()

s.columns = ['A','fill']
df['key'] = df.groupby('A').cumcount()
s['key'] = s.groupby('A').cumcount()

df.merge(s,how='left')
Out[463]:
A ignore_me fill_me key fill
0 1 0 NaN 0 a
1 1 1 NaN 1 b
2 1 2 NaN 2 NaN
3 2 3 NaN 0 c
4 2 4 NaN 1 d
5 3 5 NaN 0 e
6 3 6 NaN 1 f
7 3 7 NaN 2 g
8 3 8 NaN 3 NaN

关于python - 如何根据字典有效地填充数据框的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73092451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com