Python 转换数据帧并计算datetimedelta

Python 转换数据帧并计算datetimedelta,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有这样一段时间: col1 col2 col3 col4 aa 30-11-2017 ba 01-11-2017 aa 30-11-2017 bb 10-11-2017 ab 25-11-2017 bc 20-11-2017 ac 01-12-2017 bc 30-11-2017 我的预期产出是: col1 ba bb bc aa 29 20 0 ab 0

我有这样一段时间:

col1   col2        col3   col4
aa     30-11-2017  ba     01-11-2017
aa     30-11-2017  bb     10-11-2017
ab     25-11-2017  bc     20-11-2017
ac     01-12-2017  bc     30-11-2017
我的预期产出是:

col1   ba   bb   bc
aa     29   20   0
ab     0    0    5
ac     0    0    1
逻辑是: 对于
col1
中的每个唯一值,计算
col2
col4
之间的日期差(以天为单位),然后根据
col3
中的唯一值将其分配到右列

我最初的方法是结合使用
pd.groupby()
pd.assign()

但似乎无法解决。感谢您的帮助。

您可以尝试以下方法:

df.groupby(['col1', 'col3']).apply(lambda x: (x['col2'] - x['col4']).iloc[0] / pd.Timedelta('1d')).unstack().fillna(0)
输出:

col3    ba    bb   bc
col1                 
aa    29.0  20.0  0.0
ab     0.0   0.0  5.0
ac     0.0   0.0  1.0

您可以尝试以下操作:

df.groupby(['col1', 'col3']).apply(lambda x: (x['col2'] - x['col4']).iloc[0] / pd.Timedelta('1d')).unstack().fillna(0)
输出:

col3    ba    bb   bc
col1                 
aa    29.0  20.0  0.0
ab     0.0   0.0  5.0
ac     0.0   0.0  1.0
你可以

In [1299]: (df.col2.sub(df.col4).dt.days
              .groupby([df.col1, df.col3]).first()
              .unstack(fill_value=0))
Out[1299]:
col3  ba  bb  bc
col1
aa    29  20   0
ab     0   0   5
ac     0   0   1
你可以

In [1299]: (df.col2.sub(df.col4).dt.days
              .groupby([df.col1, df.col3]).first()
              .unstack(fill_value=0))
Out[1299]:
col3  ba  bb  bc
col1
aa    29  20   0
ab     0   0   5
ac     0   0   1