我有一个包含 5 列的数据帧,如下所示:
ID date account_no service_name amount
0 0 2019-09-01 123456789012 AWS CloudTrail 0.00
数据时间为9月1日至10月14日。由于安全原因无法共享:)
我想比较 2 个日期(9 月 21 日和 10 月 10 日(并找到差异。
以下代码按预期工作。但我想知道是否有更好的方法。
x = df[df.date == "2019-09-21"]
x = x[x.columns[3:]]
x.columns = ["service_name", "2019-09-21"]
y = df[df.date == "2019-10-10"]
y = y[y.columns[3:]]
y.columns = ["service_name", "2019-10-10"]
ndf = x.merge(y, on="service_name")
ndf["diff"] = ndf["2019-09-21"] - ndf["2019-10-10"]
service_name 2019-09-21 2019-10-10 diff
6 EC2 - Other 2.75 2.39 0.36
7 Amazon Elastic Compute Cloud - Compute 0.16 2.54 -2.38
我正在尝试找到pivot_table类似的解决方案,我可以在其中获得每周差异、每月差异等的报告。
首先使用DataFrame.pivot
或DataFrame.pivot_table
:
ndf = df.pivot(index='service_name',columns='date',values='amount')
#if aggregation is necessary
#ndf = df.pivot_table(index='service_name',columns='date',values='amount', aggfunc='mean')
ndf["diff"] = ndf["2019-09-21"] - ndf["2019-10-10"]
print (ndf)
date 2019-09-01 2019-09-21 2019-10-10
service_name
AWS CloudTrail 0.0 NaN NaN
Amazon Elastic Compute Cloud - Compute NaN 0.16 2.54
EC2 - Other NaN 2.75 2.39
date diff
service_name
AWS CloudTrail NaN
Amazon Elastic Compute Cloud - Compute -2.38
EC2 - Other 0.36