我有一个DataFrame这样的:
DataFrame
index B 0 1 1 2 2 5 3 6 4 7 5 10
我需要合并行的差异小于或等于2,选择行较小的价值观和设置计数合并结果应该是这样的:
index B count 0 1 2 1 5 3 2 10 1
如何使用Pandas解决这个问题?
vsikbqxv1#
非常类似to @AndrejKesely,只是语法更短,使用命名聚合:
df.groupby(df["B"].diff().gt(2).cumsum(), as_index=False).agg(B=("B", "first"), count=("B", "count"))
输出量:
B count 0 1 2 1 5 3 2 10 1
py49o6xq2#
使用.groupby(),其中您执行.diff(),然后执行.cumsum():
.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)
图纸:
2条答案
按热度按时间vsikbqxv1#
非常类似to @AndrejKesely,只是语法更短,使用命名聚合:
输出量:
py49o6xq2#
使用
.groupby()
,其中您执行.diff()
,然后执行.cumsum()
:图纸: