我发现此问题与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
列。这当然是完美的,唯一的问题是我发现它非常难看。
有更好的方法吗?
答案 0 :(得分:1)
您可以尝试以下方式:
df = df[df.columns[df.columns!='values']].join(s, on='keys')
确保s被命名为'值'而不是' new_values'。
据我所知,大熊猫没有能力加入"强制覆盖"或"用警告"覆盖。