我目前遇到了以下问题,我希望在满足条件之前删除pandas数据帧中的行。我想删除“Number”列中满足10或更大条件之前的每一行,具体取决于Name列。假设dataframe(df)有两列名为“Name”和“Number”。我希望在满足条件之前删除每个唯一名称的所有行,并在满足条件之后保留所有行。
Name Number
Matt 4
Matt 5
Matt 13
Matt 4
Sophie 5
Sophie 14
Sophie 18
Steve 5
Steve 4
Steve 21
Desired output:
Name Number
Matt 13
Matt 4
Sophie 14
Sophie 18
Steve 21
下面的代码在满足条件后删除所有项,但这将应用于整个系列/列的值。我想对每个唯一的名称分别这样做。有什么方法可以做到这一点,也许和一个团员?
df[(df['Number'] > 10).argmax():]
非常感谢您的帮助!
注:相关问题。
使用GroupBy.cummax,条件是在Series.gt
中获得更大的值,如10
,并通过布尔索引
进行筛选:
df = df[df['Number'].gt(10).groupby(df['Name']).cummax()]
print (df)
Name Number
2 Matt 13
3 Matt 4
5 Sophie 14
6 Sophie 18
9 Steve 21
详细信息:True
s在第一次匹配后重复到组末:
print (df['Number'].gt(10).groupby(df['Name']).cummax())
1 False
2 True
3 True
4 False
5 True
6 True
7 False
8 False
9 True
Name: Number, dtype: bool
您可以使用Groupby
Cummax
。Cummax
将True之后的每个False转换为True,因此如果您Groupby
"Name",它会创建一个布尔掩码,其中大于10的值之后的每个值都是选择:
msk = df['Number'].gt(10).groupby(df['Name']).cummax()
out = df[msk]
输出:
Name Number
2 Matt 13
3 Matt 4
5 Sophie 14
6 Sophie 18
9 Steve 21
我收到了一个要求,在新的一个月开始时强制重新授权用户(我们有一个月订阅模式)。为了实现这一点,并且不影响应用程序中使用的其他身份验证提供者,我修改了登录调用,如下所示: 以前: 之后: 请注意,出于测试目的,< code > expire suc 将被设置为1分钟;一旦实施成功,它将被计算到月底。 我期望我们的身份(扩展)在到达后会获得其属性 false,但事实并非如此。正在读取ClaimsIde
我试图开发以下过滤器与熊猫数据帧: 我有四列,,,和 如何将其作为聚合函数编写? 下面是一个编写效率低下的工作示例: 输出:
问题内容: 我知道必须在某些地方回答此问题,但我找不到它。 问题 :groupby操作后对每个组进行采样。 问题答案: 应用lambda并使用param调用:
问题内容: 如何将条件逻辑应用于Pandas DataFrame。 请参见下面显示的DataFrame, 我的原始数据显示在“数据”列中,并且期望的输出显示在其旁边。如果“数据”中的数字小于2.5,则所需的输出为False。 我可以应用循环并重新构建DataFrame …但是那是“非Python的” 问题答案: 只需将列与该值进行比较:
问题内容: 我每周有一些设备的日志数据。对于某些设备,它从星期一开始,对于某些设备,它在星期三开始,等等。有时此数据中有〜月的间隔,但是我希望DataFrame索引仍然包含每周具有NaN值的行。 我正在尝试在Python中使用,但是我无法获得期望的结果。 例: 是)我有的: 我期望/想要的(请注意带有NaN的2个新行): 我得到的是: 因此,我获得了每个星期日的所有值和日期。但是我不需要每个星期天
问题内容: 在 pandas groupby上发布了一个新的更通用的问题:每个组中的前3个值并存储在DataFrame中,并且在那里已经找到了可行的解决方案。 在此示例中,我创建了一个数据帧,其中的一些随机数据间隔为5分钟。我想创建一个数据框( df分组 ),其中列出了每小时的 3个最高值 。 即:从这一系列价值 我非常接近解决方案,但我找不到最后一步的正确语法。我到现在为止()的结果是: 我想从