Python pandas 联合并覆盖

2 投票
1 回答
879 浏览
提问于 2025-04-18 11:19

我意识到这个问题和在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并没有“强制覆盖”或者“覆盖时给警告”的功能。

撰写回答