1
我目前正在研究時間序列數據,並希望計算天數之間的差異。對於給定維度的所有實例,這必須單獨發生。下面是一個示例數據幀:如何避免在groupby.apply之後通過索引進行透視?
import pandas as pd
df = pd.DataFrame({"date": pd.to_datetime(["2017-01-01", "2017-01-01", "2017-01-02", "2017-01-02", "2017-01-03", "2017-01-03", "2017-01-04", "2017-01-04"]),
"dim_1": [0, 1, 0, 1, 0, 1, 0, 1],
"value": [50, 100, 70, 120, 150, 110, 130, 200]})
對於每個日期,dim_1組合有值。現在,我想出了以下解決方案:
df.set_index("date").groupby(["dim_1"])\
.apply(lambda x: x["value"] - x["value"].shift())
結果造成:
date 2017-01-01 2017-01-02 2017-01-03 2017-01-04
dim_1
0 NaN 20.0 80.0 -20.0
1 NaN 20.0 -10.0 90.0
現在我已經融數據框爲了得到我預期的結果:
pd.melt(df.set_index("date").groupby(["dim_1"])\
.apply(lambda x: x["value"] - x["value"].shift()).reset_index(),
["dim_1"])
,導致:
dim_1 date value
0 0 2017-01-01 NaN
1 1 2017-01-01 NaN
2 0 2017-01-02 20.0
3 1 2017-01-02 20.0
4 0 2017-01-03 80.0
5 1 2017-01-03 -10.0
6 0 2017-01-04 -20.0
7 1 2017-01-04 90.0
當我通過多個維度進行分組時,這個問題不會出現。
我認爲有一個更簡單的方法來實現這個結果,但我目前無法找到它。
非常感謝您提前!