【问题标题】:Pandas merge problems熊猫合并问题
【发布时间】:2023-03-11 07:49:01
【问题描述】:

我有两个数据框

df1

    KO-ST  1_UID      2_Vloge
0   1976-_  200106897  200106897.0
1    991-_  200108737  200108737.0
2  2147---  200109776  200109776.0
3   2048-_  200300912  200300912.0
4   2194-_  200301057  200301057.0
5  2386---  200301312  200301312.0
6   2002-_  200301315  200301315.0
7   1324-_  200301573  200301573.0
8   1625-45  200301868  200301868.0
9   1625-_  200301868  200301868.0
...

df2
                              a                    b
SID  KO-ST                                     
10000002 851-601          288.0                288.0
10000003 851-1             68.0                 68.0
10000328 853-103           64.5                 64.5
10000583 861-25            30.1                 30.1
10001002 2590-1            96.7                178.9
10001004 2593-2           349.2                349.2
10001005 2593-3           282.0                295.2
10001006 2593-4           121.5                121.5
10001008 2593-6           109.3                110.3
10001009 2593-7             9.9                  9.9
...

有超过 500.000 行,其中 KO-ST 是唯一的,SID 可以重复。我正在尝试将它们分组并重复列ab 中的值。来自 KO-ST 的值是唯一的,在 10% 的情况下 - 并不完美,这种情况(例如 1324-___)在 df2 中将没有匹配项。

我的初始代码是

REN_ES = pd.merge(df1, df2, left_index=True, on = 'KO-ST')

但我得到一个错误:

KeyError: 'KO-ST'

我哪里弄错了? df1 是导入 2 个 csv 文件并组合和合并一些值的结果。为了更方便的数据处理,KO-ST 列被添加为具有功能的两列的组合:

DS_STA['KO-ST'] =DS_STA['KO_SIFKO'].map(str) + "-" + DS_STA['STEV'].map(str)

KO-SIFKOSTEV 是整数,因此是代码。我添加这个是因为我怀疑数据类型的识别有问题。

【问题讨论】:

  • 不是关于这个问题,但 .astype(str) 比 .map(str) 更有效
  • 试过了......这是同样的错误@lwileczek

标签: python pandas merge group-by


【解决方案1】:

df2 有一个多索引,“KO-ST”不是列名。 left_index=True 覆盖 on'KO-ST" 所以删除它。试试:

REN_ES = pd.merge(df1, df2.reset_index(), on = 'KO-ST')

【讨论】:

    猜你喜欢
    • 2019-05-26
    • 2017-08-06
    • 2021-03-25
    • 2020-01-11
    • 2017-10-01
    • 2023-02-21
    • 2023-03-06
    相关资源
    最近更新 更多