我有一个数据框要插入mysql
数据库。在插入之前,我需要在包含非唯一键的列中填写NA值。填充的值需要跨组共享,但不能与sql表中任何预先存在的值重叠。
假设表中的最大键值为5.我需要:
id group key
1 A 1
2 A 1
3 B NA
4 B NA
5 C 2
6 D NA
成为:
id group key
1 A 1
2 A 1
3 B 6
4 B 6
5 C 2
6 D 7
答案 0 :(得分:1)
这是使用.rank
技巧的另一种方式。它产生的效果与您想要的输出相同。
max_key_value = 5
# boolean selector to select rows with NaN
null_sel = df["key"].isnull()
# replace the key by rank value
df.loc[null_sel, 'key'] = df.loc[null_sel, 'group'].rank(method='dense') + max_key_value
df
group id key
0 A 1 1
1 A 2 1
2 B 3 6
3 B 4 6
4 C 5 2
5 D 6 7
答案 1 :(得分:0)
我能找到的最佳方法是使用分类:
max_key_value = 5
df = pd.DataFrame({'id':[1, 2, 3, 4, 5, 6],
'group':['A', 'A', 'B', 'B', 'C', 'D'],
'key': [1, 1, np.NaN, np.NaN, 2, np.NaN]})
df['temp_key'] = pd.Categorical.from_array(df.group).codes + max_key_value + 1
df['key'] = np.where(pd.isnull(df['key']), df['temp_key'], df['key'])