如何在pandas数据框中选择百分比行

6
在Python中,我有几个数据框的结构如下所示:
0 0 0 0
1 1 1 1
2 2 2 2
. . . .
n n n n

如何选择中间33%的行(根据索引而不是值确定)?

这是我尝试过的方法:

df.iloc[int(len(df)*0.33):int(len(df)*0.66)]

它确实有效,但感觉很混乱,更不用说强制整数。

我在想是否有更清晰的方法选择数据框的百分比,因为到目前为止我在文档中找不到任何有用的命令。


除非大多数人都能从中受益,否则每个操作都不能在库中有一个已定义的函数。如果你感觉不喜欢自己的方法,那就编写一个函数。 - Bharath M Shetty
5个回答

3
您也可以在索引上使用numpy的percentile函数。当您的索引不从零开始时,此方法也适用。
df[(df.index>np.percentile(df.index, 33)) & (df.index<=np.percentile(df.index, 66))]

1
虽然不是我在寻找的全部内容,但在这种情况下非常有用,谢谢。对于任何感兴趣的人,NaNPercentile文档可以在此处查看:https://docs.scipy.org/doc/numpy/reference/generated/numpy.nanpercentile.html - Jesse

1
将数据按70:30的比例拆分,然后尝试这个。
percentage=round(len(df)/100*70) 
documents(train) = df.head(percentage)  
test=df.iloc[percentage:len(df),:]

1
编写一个函数来完成你的任务,即:
def get_middle(df,percent):

    start = int(len(df)*percent)
    end = len(df) - start

    return df.iloc[start:end]

get_middle(df,0.33)

0
要做到这一点,你需要与数字进行“玩耍”,并定义你想要的索引。
df.iloc[(len(df)// 3) : (len(df) - len(df)// 3), :]

或者

df.iloc[(len(df)// 3) : (len(df)// 3 * 2), :]

在这些例子中,我定义了一个区间,即(len(df.index)// 3) : (len(df.index)// 3 * 2),它切割了数据框中表格的1/3到2/3之间的行。

1
访问.index是无用的。如果直接使用df,您将获得相同的长度。 - Bharath M Shetty

-2
如果你正在处理真实的数据,而且只需要处理其中的0.01%(已经足够了),那么可以使用Pandas来完成你的工作。
Dataframe.sample(frac=0.01)

这并没有回答问题。你的解决方案在数据框中选择随机行。问题是如何选择所有行的中间三分之一。 - AlexK

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