我有一个包含数千行的大型数据帧(称为df\ NoMissing),我需要对它们进行计算和分析。你知道吗
NoDemande NoUsager Sens IdVehiculeUtilise Fait HeureArriveeSurSite HeureEffective Periods
0 42196000013 000001 + 287Véh 1 11/07/2015 08:02:07 11/07/2015 08:02:13 Matin
1 42196000013 000001 - 287Véh 1 11/07/2015 08:17:09 11/07/2015 08:17:13 Matin
2 42196000002 000314 + 263Véh 1 11/07/2015 09:37:43 11/07/2015 09:53:37 Matin
3 42196000016 002372 + 287Véh 1 11/07/2015 09:46:42 11/07/2015 10:01:39 Matin
4 42196000015 000466 + 287Véh 1 11/07/2015 09:46:42 11/07/2015 10:01:39 Matin
5 42196000002 000314 - 263Véh 1 11/07/2015 10:25:17 11/07/2015 10:38:11 Matin
6 42196000015 000466 - 287Véh 1 11/07/2015 10:48:51 11/07/2015 10:51:30 Matin
7 42196000016 002372 - 287Véh 1 11/07/2015 11:40:56 11/07/2015 11:41:01 Matin
8 42196000004 002641 + 263Véh 1 11/07/2015 13:39:29 11/07/2015 13:52:50 Soir
9 42196000004 002641 - 263Véh 1 11/07/2015 13:59:56 11/07/2015 14:07:41 Soir
我想做的是在NoDemande
,NoUsager
,Periods
列中有两个值相同但在Sens
列中不同的行在HeureArriveeSurSite
列和HeureEffective
列之间做减法。由于结果与当前数据帧不对应,因此结果将保存在新的数据帧中
我试图通过识别Sens
来分离数据帧,这样就可以直接进行减法运算。但根本不起作用。你知道吗
df_new = pd.DataFrame(columns=['NoDemande', 'NoUsager', 'Periods', 'DureeTrajet']
df1 = df_NoMissing[(df_NoMissing['Sens'] == '+') & (df_NoMissing['Periods'] == 'Matin')]
df2 = df_NoMissing[(df_NoMissing['Sens'] == '-') & (df_NoMissing['Periods'] == 'Matin')]
df_new['DureeTrajet'] = df2['HeureArriveeSurSite'].values-df1['HeureEffective'].values
这个返回:ValueError: operands could not be broadcast together with shapes (1478,) (1479,)
我还尝试了加载方式,每次都准确地说出我想要什么:
df1.loc[df1['NoDemande'] == '42196000015','HeureEffective'] - df2.loc[df2['NoDemande'] == '42196000015','HeureArriveeSurSite']
但这次回来的是:
4 NaT
6 NaT
dtype: timedelta64[ns]
我该怎么做才能得到我想要的?你知道吗
编辑
输出如下所示:
NoDemande NoUsager Periods DureeTrajet
0 42196000013 000001 Matin 00:14:54
1 42196000002 000314 Matin 00:31:40
2 42196000016 002372 Matin 00:39:23
3 42196000015 000466 Matin 00:47:12
4 42196000004 002641 Soir 00:07:06
~任何帮助都将不胜感激~
所以我的解决方案是:
联接df1和df2(不是附加它们,而是用外部联接联接)。为此,应该重命名df2中除NoDemande、NoUsager和Period之外的所有列。例如,在df1中是Sens,在df2中是Sens2。加入之后,试着减去你想要的日期。
如果任何一个条目没有一个与另一个Sens值对应的条目,也可能会丢失一些内容。我想,如果你不在的话,你应该过滤掉。因为你只需要DureeTrajet就可以为那些有好几个会话的用户提供服务,不是吗?所以,如果一个用户只有一个会话,你不需要他在df\u新表中?
最后你应该只有那些条目,它们是成对的。为此你可以减去日期。
编辑:
如果某些条目不仅有一对,而且有两对或更多对,那么您应该定义哪个对具有更高的优先级/更有意义。你知道吗
好的,从提供的DF开始-让我们在分组列上创建一个索引,并为
Sens
操作透视到列:然后-我们取适当的差异(根据您的代码):
这就给了你:
相关问题 更多 >
编程相关推荐