首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当在ID (主键)这样的公共列上合并Dataframes时,如何处理单个ID在第二个df中多次出现的数据?

当在ID (主键)这样的公共列上合并Dataframes时,如何处理单个ID在第二个df中多次出现的数据?
EN

Stack Overflow用户
提问于 2020-11-14 18:24:16
回答 1查看 176关注 0票数 0

所以我有两个dfs。

DF1

代码语言:javascript
复制
Superhero ID    Superhero      City
212121          Spiderman      New york
364331          Ironman        New york
678523          Batman         Gotham
432432          Dr Strange     New york
665544          Thor           Asgard
123456          Superman       Metropolis
555555          Nightwing      Gotham
666666          Loki           Asgard

Df2

代码语言:javascript
复制
SID       Mission End date
665544    10/10/2020
665544    03/03/2021
212121    02/02/2021
665544    05/12/2020
212121    15/07/2021
123456    03/06/2021
666666    12/10/2021

我需要创建一个新的df,总结多少英雄在每个城市和在哪个季度将完成他们的任务。我将能够匹配df1中的超级英雄(和他们的城市),通过他们的超级英雄ID或Df2中的SID (‘超级英雄Id’=‘SID’)来完成任务。超级英雄ID在Df1中只出现一次,但在DF2中可以多次出现。

最后,我需要一个总数的不。英雄在不同的城市(我可以做-见下文),以及多少英雄将是自由的每季度。

这是季度的门槛值。

代码语言:javascript
复制
Quarter 1 – Apr, May, Jun
Quarter 2 – Jul, Aug, Sept
Quarter 3 – Oct, Nov, Dec
Quarter 4 – Jan, Feb, Mar

下面的代码告诉我每个城市有多少英雄:

代码语言:javascript
复制
df_Count = pd.DataFrame(df1.City.value_counts().reset_index())

它产生:

代码语言:javascript
复制
 City       Count
New york     3
Gotham       2
Asgard       2
Metropolis   1

我还可以通过以下操作将日期转换为日期时间格式:

代码语言:javascript
复制
#Convert to datetime series
Df2['Mission End date'] = pd.to_datetime('Df2['Mission End date']')

最终我需要一个新的df看起来像这个

代码语言:javascript
复制
     City      Total Count    No. of heroes free in Q3    No. of heroes free in Q4   Free in Q1 2021+
    New york       3               2                           0                           1
    Gotham         2               2                           2                           0
    Asgard         2               1                           2                           0
    Metropolis     1               0                           0                           1 

如果有人能帮我创建合适的宿舍,并能把它们分类成合适的栏目,我将非常感激。我也想要一种方法来处理有多个任务结束日期的英雄。我不能忽视他们我还需要数他们。我怀疑我需要创建一个自定义函数,这个函数可以通过apply()方法和lambda表达式应用于每一行。这个问题已经痛苦了一段时间了,所以我很感激我能得到的一切帮助。(非常感谢:)

EN

回答 1

Stack Overflow用户

发布于 2020-11-14 19:52:45

在将您的数据文件与

代码语言:javascript
复制
 df = df1.merge(df2, left_on='Superhero ID', right_on='SID')

并将日期列转换为pd.datetime格式。

代码语言:javascript
复制
df.assign(missing_end_date=lambda x: pd.to_datetime(x['Missing End Date']))

您可以创建两个列;一个用于提取季度,另一个用于提取新创建的datetime列的年份。

代码语言:javascript
复制
df.assign(quarter_end_date=lambda x: x.missing_end_date.dt.quarter)
  .assign(year_end_date=lambda x: x.missing_end_date.dt.year)

并将它们合并成一个列,该列以Qx格式显示季度,yyyy

代码语言:javascript
复制
df.assign(quarter_year_end=lambda x: f"Q{int(x.quarter_end_date)}, {int(x.year_end_date)}")

最后,根据城市和地区,计算超英雄的数量,并将数据转换为获得所需的结果。

代码语言:javascript
复制
df.groupby(['City', 'quarter_year_end'])
.count()
.reset_index()
.pivot(index='City', columns='quarter_year_end', values='Superhero')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64837197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档