我有一个DataFrame这样的:
index B
0 1
1 2
2 5
3 6
4 7
5 10
Run Code Online (Sandbox Code Playgroud)
我需要合并差值小于或等于 2 的行,选择值较小的行并设置计数合并
结果应该是这样的:
index B count
0 1 2
1 5 3
2 10 1
Run Code Online (Sandbox Code Playgroud)
如何使用 pandas 解决这个问题?
与 @AndrejKesely非常相似,只是语法更短,使用命名聚合:
df.groupby(df["B"].diff().gt(2).cumsum(),
as_index=False).agg(B=("B", "first"),
count=("B", "count"))
Run Code Online (Sandbox Code Playgroud)
输出:
B count
0 1 2
1 5 3
2 10 1
Run Code Online (Sandbox Code Playgroud)
使用.groupby()您所做的地方,.diff()然后是.cumsum():
out = (
df.groupby(df["B"].diff().gt(2).cumsum())
.agg({"B": ("min", "count")})
.droplevel(0, axis=1)
.rename(columns={"min": "B"})
.reset_index(drop=True)
)
print(out)
Run Code Online (Sandbox Code Playgroud)
印刷:
B count
0 1 2
1 5 3
2 10 1
Run Code Online (Sandbox Code Playgroud)