[Python] [Pandas]有效地交叉和比较两个groupby列中的值

时间:2018-08-22 08:02:06

标签: python pandas pandas-groupby

我目前正尝试将两个数据帧(df和marche_type_jointure)的数据按某些列(英语:停靠点,方向,日期类型,季节,年份)分组,以这里的代码显示:

df_grouped = df.groupby(['arret', 'sens', 'type_jour','saison', 'annee'])
marche_type_jointure_grouped = marche_type_jointure.groupby(['arret', 'sens', 'type_jour','saison', 'annee'])

这给了我以下带有相关列的数据框(请参见屏幕快照df_variables_1df_variables_2marche_type_variables),并且您可以使用以下数据框作为示例(仅最重要的变量)如您所见):

df_jointure = pd.DataFrame([
['Aller','VIG01A' , time(7,21,28),'vac_s' ,'hiver' ,1978 , 'NaN' ], 
['Aller','VIG01A' , time(18,7,35),'vac_s' ,'hiver' ,1978 , 'NaN' ], 
['Aller','LYC30R' , time(7,21,54),'vac_s' ,'hiver' ,1978 , 'NaN' ], 
['Aller','LYC30R' , time(14,43,42),'vac_s' ,'hiver' ,1978 , 'NaN' ] ], columns=['sens', 'arret', 'heure_arrivee_reelle', 'type_jour', 'saison', 'annee', 'temps_trajet_mt'])


marche_type_jointure = df = pd.DataFrame([
['VIG01A', time(6,0,0), time(6,29,0), 'hiver', 'Aller', 4, 'vac_s', 1978],
['VIG01A', time(7,0,0), time(7,29,0), 'hiver', 'Aller', 4, 'vac_s', 1978], 
['VIG01A', time(7,0,0), time(7,59,0), 'hiver', 'Aller', 4, 'vac_s', 1978], 
['VIG01A', time(18,30,0), time(18,59,0), 'hiver', 'Aller', 4, 'vac_s', 1978], 
['LYC30R', time(6,0,0), time(6,29,0), 'hiver', 'Aller', 1, 'semaine', 1978], 
['LYC30R', time(7,45,0), time(7,59,0), 'hiver', 'Aller', 1, 'semaine', 1978],
['LYC30R', time(9,30,0), time(15,59,00), 'hiver', 'Aller', 1, 'semaine', 1978]], 
columns=['arret', 'heure_debut_periode', 'heure_fin_periode', 'saison', 'sens', 'temps_trajet_sur_periode', 'type_jour', 'annee])

以下也是最重要的变量: 在df中:'sens'(第6列), 'arret'停止,第9列), 'heure_arrivee_reelle'((公共汽车的实际到达时间)第13栏), 'type_jour'类型的一天,其中“ vac_s”表示假期 ,“ samedi”表示星期六 ,“ dimanche”是 sunday ,最后是“ semaine”,表示 week ,第25列), 'saison'(季节:第26列为冬季的“冬日”或夏季为“ ete”), 'annee'(表示2018-2018年的冬季,即2018或1978年,即2017年1月至2017年5月,然后是2017年9月至2018年5月,第29栏), “ temps_trajet_mt ”暂时为空,但值将来自“ marche_type_jointure_grouped”(。temps_trajet_sur_periode)。

对于marche_type_jointure_grouped:'arret'(停止),'heure_debut_periode''heure_fin_periode',它们是某个时间段的开始和结束,其中某个时间段'temps_trajet_sur_periode'是从前一站到我们所站(在公交线路上)的时间。 'type_jour''saison''sens'df_grouped中的相同。

我实际上要做的是,对于分组数据帧中的每个“关键”(停靠点,方向,日期类型,季节和年份),比较值'heure_arrivee_reelle'(' actual_time_of_arrival df_grouped中的'英文'(英文)'(<< em> end_time_period ')和/或'heure_fin_periode'(' starting_time_period '遵循以下条件: “如果[heure_debut_periode,heure_fin_periode]中的heure_arrivee_reelle”(作为 interval ,但可能会更容易得出相同的结果)'heure_debut_periode'。 显然,我正在寻找一种有效的方法。这是我尝试执行的操作,以便您可能会了解我正在执行的操作:

then the value of temps_trajet_mt in df_grouped becomes the corresponding value of temps_trajet_sur_periode in marche_type_jointure_grouped

谢谢您的帮助,这真的意味着我已经有一个多星期了!并且请告诉我我想做的事情是否不清楚(如果您愿意的话,或多或少是有条件的联合)

0 个答案:

没有答案
相关问题