这是我的数据框:
import pandas as pd
df = pd.DataFrame(
{
'a': [-3, -1, -2, -5, 10, -3, -13, -3, -2, 1, -200, -100],
}
)
预期输出:
a
10 -200
11 -100
逻辑:
我想返回负数的最大连续串之和。换句话说,我想要至少两个连续的负行,然后我希望它的总和在绝对值方面是最大的:
我的尝试基于这个答案:
s = np.sign(df['a'])
g = s.ne(s.shift()).cumsum()
out = df[g.eq(df[s.eq(-1)].groupby(g).sum().idxmax())]
它给了我一个空的数据框
转换而不是聚合,然后您可以使用它来过滤最低的总和。
s = np.sign(df['a'])
g = s.ne(s.shift()).cumsum()
m = df.groupby(g).transform(sum)['a']
out = df[m.min() == m]
a
10 -200
11 -100