高效地根据某个条件将 Pandas 数据框拆分成两个数据框

4

我想根据特定列的if条件将给定数据框拆分为两个数据框。目前我是通过两次遍历整个数据框来实现这一点。请建议一些改进方法。

 player   score
 dan       10
 dmitri    45
 darren    15
 xae12     40

就像在上面的数据框中,我希望将数据框分成两个部分,其中一个包含得分低于15的球员行,另一个包含其余行。我只想用一次迭代来完成这个操作。(如果答案适用于 n 个数据框,那会对我很有帮助) 。

3个回答

4

有两种可能的方法可以根据您的需求选择数据框。在同一查询中进行时间分析,以便我们可以了解哪种方法更快。

1)使用两个不同的df

%%time

dataframe1  = dataframe[dataframe['score']>15]
dataframe2  = dataframe[dataframe['score']<=15]

输出结果为 Wall time: 4.06 ms

2) 使用布尔和取反概念:

%%time

a = dataframe.score>15

dataframe1 = dataframe[a]
dataframe2 = dataframe[~a]

这个查询的输出时间是Wall time: 0.02 ms

显然,第二种方法要快得多。


哇...即使是这么小的数据框,这也是一个巨大的差异...感谢您的回答... 另外,您能帮我理解一下,在布尔方法中我们是否也要循环两次数据框(以检查真值)? - Paras Gupta
@Marshall 如果您认为问题已经解决,可以接受答案。这就是社区的运作方式。这也将有助于未来的访问者。 - Anshul Vyas
@Anshul Vyas正在使用其他人的答案并将它们组合在一起。 Marshall,我们不能告诉你该选谁,但是嗯…… - wwnde
实际上...没错,是我不对!!我对这个平台还很新。 - Paras Gupta
@wwnde 对不起,如果我伤害了这里专家的感情,很多时候我也被要求在评论中接受高级社区成员的答案。 - Anshul Vyas

2

IICU

使用布尔选择

m=df.score>15

Lessthan15=df[~m]
Morethan15=df[m]

超过15

图片描述

少于15

图片描述


谢谢回答...这个完美地解决了问题..但是我想问一下它在幕后是如何工作的..比如它是每行检查两次真或假吗? - Paras Gupta
布尔索引用于选择数据。也就是说,true或false。例如,df.score>15如果被调用或打印,则会产生True或False,因此它可以作为布尔索引访问。我们还可以对数据框进行掩码处理。当我调用df[m]时,就是这样做的。 ~用于反转索引值。布尔索引也可以用于调用列值,例如df.loc[m,'score']。 - wwnde
这解释了很多事情...谢谢!! 我有一个问题...在这种情况下,我们是两次检查每一行的真假吗? - Paras Gupta

0

试试这个:

df_less_than_15 = df[df['score'] < 15]
df_more_than_15 = df[df['score'] >= 15]

你可以对每个给定的数据框使用相同的东西。


嗨,谢谢回复...但是这会在数据框上循环两次..我想要在单次迭代中完成。 - Paras Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接