Python pandas加入覆盖

时间:2014-06-27 13:25:44

标签: python pandas

我发现此问题与join or merge with overwrite in pandas类似,但接受的答案对我不起作用,因为我想使用on='keys'中的df.join()

我有一个DataFrame df,如下所示:

    keys    values
0      0  0.088344
1      0  0.088344
2      0  0.088344
3      0  0.088344
4      0  0.088344
5      1  0.560857
6      1  0.560857
7      1  0.560857
8      2  0.978736
9      2  0.978736
10     2  0.978736
11     2  0.978736
12     2  0.978736
13     2  0.978736
14     2  0.978736

然后我有一个系列s(这是某些df.groupy.apply()的结果)具有相同的键:

keys
0       0.183328
1       0.239322
2       0.574962
Name: new_values, dtype: float64

基本上我想将df中的'值'替换为系列中的值keys,以便每个keys块获得相同的新值。目前,我这样做:

df = df.join(s, on='keys')
df['values'] = df['new_values']
df = df.drop('new_values', axis=1)

然后获得(和期望的)结果:

    keys    values
0      0  0.183328
1      0  0.183328
2      0  0.183328
3      0  0.183328
4      0  0.183328
5      1  0.239322
6      1  0.239322
7      1  0.239322
8      2  0.574962
9      2  0.574962
10     2  0.574962
11     2  0.574962
12     2  0.574962
13     2  0.574962
14     2  0.574962

也就是说,我将其添加为新列,并使用on='keys'获取更正形状。然后,我将values指定为new_values并删除new_values列。这当然是完美的,唯一的问题是我发现它非常难看。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方式:

df = df[df.columns[df.columns!='values']].join(s, on='keys')

确保s被命名为'值'而不是' new_values'。

据我所知,大熊猫没有能力加入"强制覆盖"或"用警告"覆盖。