Python pandas 联合并覆盖
我意识到这个问题和在pandas中合并或连接并覆盖的内容很相似,但接受的答案对我来说不适用,因为我想使用df.join()
中的on='keys'
。
我有一个数据框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()
得到的结果),它的键和df
是一样的:
keys
0 0.183328
1 0.239322
2 0.574962
Name: new_values, dtype: float64
基本上,我想用序列中的值替换df
中的'values',通过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 个回答
1
你可以试试这样的做法:
df = df[df.columns[df.columns!='values']].join(s, on='keys')
确保s的名字是'values',而不是'new_values'。
根据我所知道的,pandas并没有“强制覆盖”或者“覆盖时给警告”的功能。