我有两个 Dataframe 。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']放入该CITY的df1['VISITS']中。
更新后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对象
2条答案
按热度按时间jdzmm42g1#
您可以从
df2
中删除重复的值,只保留最后更新的值(如果您的城市已经按'NUMBER'排序,您可以删除sort_values
):根据@Nick的回答:
输入数据:
sz81bmfz2#
一种方法是将
VISITS
列从df1
中删除,然后将join
删除到df2
,并按CITY
分组并聚合为max
,将NUMBER
列重命名为VISITS
:示例数据的输出: