python - 您如何使用函数来聚合数据框列并根据欧洲日期将它们分成季度?
问题描述
嗨,我是 pandas 的新手,正在努力解决一个具有挑战性的问题。
我有2个数据框:
Df1
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
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 来总结每个城市有多少英雄以及他们的任务将在哪个季度完成。另请注意,日期以欧洲格式书写(日/月/年)。
我可以用这条线总结每个城市有多少英雄:
df_Count = pd.DataFrame(df1.City.value_counts().reset_index())
这给了我:
City Count
New york 3
Gotham 2
Asgard 2
Metropolis 1
我需要添加另一列,列出英雄是否会在某些季度免于任务。
Quarter 1 – Apr, May, Jun
Quarter 2 – Jul, Aug, Sept
Quarter 3 – Oct, Nov, Dec
Quarter 4 – Jan, Feb, Mar
如果 Df2 中的英雄 ID 没有任务结束日期,则计数应加一。如果他们确实有结束日期并且它被分成
所以最后它应该是这样的:
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
我想我需要使用 python datetime 库来获取当前日期时间。比创建一个自定义函数,我可以使用 lambda 将其应用于每一行。类似于下面的代码:
from datetime import date
today = date.today()
q1 = '05/04/2021'
q3 = '05/10/2020'
q4 = '05/01/2021'
count=0
def QuarterCount(Eid,AssignmentEnd )
if df1['Superhero ID'] == df2['SID'] :
if df2['Mission End date']<q3:
++count
return count
elif df2['Mission End date']>q3 && <q4:
++count
return count
elif df2['Mission End date']>q1:\
++count
return count
df['No. of heroes free in Q3'] = df1[].apply(lambda x(QuarterCount))
请帮助我纠正我的语法或逻辑,或者让我知道是否有更好的方法来做到这一点。学习熊猫很有挑战性,但也很有趣。我很感激你能提供的任何帮助:)
解决方案
推荐阅读
- java - java中二叉树的一种方法
- swift - UIMarkupTextPrintFormatter 和 Mac Catalyst
- entity-framework-core - efcore change modified state to update entity is not working with sub data objects
- sql-server - 使用 SQL Server 计算 GPS 数据之间的距离
- c++ - 高于给定值的最小可表达值
- laravel - 尝试使用来自 ixudra/cURL 的 cURL 从 API 获取数据的非对象的属性“id”时出错
- sql - 如何从表中获取每月总和?
- sql-server - 函数或存储过程调用后的持久 ROW LOCK
- r - 在 R 中的 CCA 图中添加绘图符号
- sql - 创建包含 Excel 列中的值的 SQL 查询