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