Python pandas 通过在另一个具有不同标签的 DataFrame 中搜索来替换 DataFrame 的值

问题描述 投票:0回答:1

我有两个数据框。 df1 包含城市和访问总数。 df2 包含 VISITS 记录。

定期使用 df2 的数据更新 df1 以及新的访问。

df1示例(更新前)

ID    NAME     VISITS
---
01    CITY1    01
02    CITY2    01
...
06    CITYZ    12

df2示例

CITY     NUMBER
---
...
CITY1    01
CITY2    01    <--- highest of CITY2
CITYZ    13
CITY1    02
...
CITYZ    14
CITY1    03    <--- highest of CITY1
CITYZ    15    <--- highest of CITYZ

要更新它,将在 df2['CITY'] 中查找 df1['NAME'] (这是相关性)并取最高的 df2['NUMBER'] 并将其放入 df1[ '访问']那个城市。

df1更新后

ID    NAME     VISITS
---
01    CITY1    03    <--- updated
02    CITY2    01    <--- updated or not, it doesn't matter
...
06    CITYZ    15    <--- updated

我的做法:

df2.loc[df2['CITY'] == 'CITYZ', 'NUMBER'].max()

我得到了“CITIZ”的最大数量(硬编码),但我不知道如何将其链接到df1

下一个显然是错误的,但它是想法:

df1['VISITS'] = df2.loc[df2['CITY'] == df1['NAME'], 'NUMBER'].max()

此“解决方案”给出以下错误:ValueError:只能比较相同标签的Series对象

python pandas dataframe replace series
1个回答
0
投票

执行此操作的一种方法是将

VISITS
列从
df1
删除,然后将
join
删除到
df2
,按
CITY
分组并聚合为
max
,将
NUMBER
列重命名为
VISITS
:

out = (df1
       .drop('VISITS', axis=1)
       .set_index('NAME')
       .join(df2.groupby('CITY')['NUMBER'].max())
       .rename(columns={'NUMBER':'VISITS'})
       .reset_index()
      )

样本数据的输出:

    NAME  ID  VISITS
0  CITY1   1       3
1  CITY2   2       1
2  CITYZ   6      15
© www.soinside.com 2019 - 2024. All rights reserved.