【问题标题】:Python pandas join on with overwritePython pandas 加入并覆盖
【发布时间】:2014-06-28 00:00:22
【问题描述】:

我意识到这个问题类似于join or merge with overwrite in pandas,但接受的答案对我不起作用,因为我想使用来自df.join()on='keys'

我有一个 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 列。这当然可以完美地工作,唯一的问题是我觉得它非常难看。

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以试试这样的:

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

    确保 s 被命名为“values”而不是“new_values”。

    据我所知,pandas 无法加入“强制覆盖”或“警告覆盖”。

    【讨论】:

      猜你喜欢
      • 2021-07-16
      • 2015-11-30
      • 2020-04-28
      • 2018-11-15
      • 2012-04-04
      • 2022-11-09
      • 2019-04-14
      • 2011-03-02
      相关资源
      最近更新 更多