如何获得同一天的两个条目之间的差额?

时间:2018-11-29 21:48:59

标签: python pandas

我有以下熊猫DataFrame:

import pandas as pd
df = pd.DataFrame({"datetime": ["30.12.1999 00:59:00", "30.12.1999 23:59:00", "31.12.1999 00:59:00", "31.12.1999 23:59:00"], "b": [4, 15, 26,7]})
df["datetime"] = pd.to_datetime(df.datetime)
df["date"]=df.datetime.dt.date

如下所示:

             datetime   b        date
0 1999-12-30 00:59:00   4  1999-12-30
1 1999-12-30 23:59:00  15  1999-12-30
2 1999-12-31 00:59:00  26  1999-12-31
3 1999-12-31 23:59:00   7  1999-12-31

数据框实际上有更多行,但是以下原则仍然有效:一天只有两行。

我想得到b的两个值之间的差。因此,在上面的示例中,我希望得到一个如下所示的数据框:

        date  b_delta
0 1999-12-30       11
1 1999-12-31      -19

我该如何实现?

2 个答案:

答案 0 :(得分:4)

最简单的方法是:

df.set_index('date').groupby('date')['b'].diff().reset_index(name='b_delta').dropna()

输出:

date           b_delta
1999-12-30     11.0
1999-12-31    -19.0

答案 1 :(得分:1)

我将索引设置为date并按其分组,然后在列diff上使用b减去连续值。然后,您可以仅选择非null值:

g = df.set_index('date').groupby(level=0).b.diff()
g[g.notnull()]

date
1999-12-30    11.0
1999-12-31   -19.0
Name: b, dtype: float64

您可以将其设置为具有所需b_delta标头的数据框,如下所示:

>>> g[g.notnull()].to_frame('b_delta')
            b_delta
date               
1999-12-30     11.0
1999-12-31    -19.0

编辑:我忽略了使用dropna的方法,这确实是解决问题的方法(就像@AbhinavSood的好答案,实际上应该是被接受的答案...):< / p>

df.set_index('date').groupby(level=0).b.diff().dropna().to_frame('b_delta')