我有两个数据框。 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对象
执行此操作的一种方法是将
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