更新pandas

时间:2015-08-12 18:39:25

标签: python pandas

我有一个数据框要插入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

2 个答案:

答案 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'])