如何在Python中仅使用同时存在于两天的ID来计算t和t-1的值差异?
我应该怎么写Python代码来计算t和t-1之间的值差异,前提是t中的id在t-1中也存在?换句话说,如果某个id在t-1中存在但在t中消失了,就不算在计算里,也不出现在输出的数据表中。谢谢!
举个例子:
日期 | id | 值 |
---|---|---|
2024年1月1日 | a | 100 |
2024年1月2日 | a | 101 |
2024年1月1日 | b | 99 |
2024年1月5日 | b | 97 |
2024年1月6日 | b | 98 |
2024年1月2日 | c | 98 |
2024年1月5日 | c | 97 |
2024年1月5日 | a | 97 |
期望的输出:
日期 | id | 值 | 差异 |
---|---|---|---|
2024年1月1日 | a | 100 | |
2024年1月2日 | a | 101 | 1 |
2024年1月5日 | b | 97 | |
2024年1月6日 | b | 98 | 1 |
1 个回答
0
试试这个:
df["Date"] = pd.to_datetime(df["Date"])
df = df.sort_values(by="Date")
df = (
df.groupby("id")
.apply(
lambda x: x[(mask := x["Date"].diff().eq("1 day")) | mask.shift(-1)],
include_groups=False,
)
.droplevel(1)
.reset_index()
)
df["Delta"] = df.groupby("id")["Value"].diff()
print(df)
输出结果是:
id Date Value Delta
0 a 2024-01-01 100 NaN
1 a 2024-01-02 101 1.0
2 b 2024-01-05 97 NaN
3 b 2024-01-06 98 1.0