我的数据框是:
import pandas as pd
df = pd.DataFrame(
{
'a': [-3, -1, -2, -5, 10, -3, -13, -3, -2, 1, 2, -100],
}
)
预期输出:
a
0 -3
1 -1
2 -2
3 -5
逻辑:
我想返回最大的负数序列。如果有多个最大的序列,我想返回第一个序列。有df
两个大小为 4 的负数序列,因此返回第一个。
这是我的尝试,但每当我idxmax()
在代码中使用时,我都想仔细检查,因为在某些情况下有时会变得棘手。
import numpy as np
df['sign'] = np.sign(df.a)
df['sign_streak'] = df.sign.ne(df.sign.shift(1)).cumsum()
m = df.sign.eq(-1)
group_sizes = df.groupby('sign_streak').size()
largest_group = group_sizes.idxmax()
largest_group_df = df[df['sign_streak'] == largest_group]
您的代码很好,您可以简化一点,避免中间的列:
或者,由于您并不真正关心 0/+ 差异:
注意:如果您想要第一
idxmax
场比赛,那总是没问题的。输出: