问题:熊猫每隔n行
Dataframe.resample()仅适用于时间序列数据。我找不到从非时间序列数据中获取第n行的方法。最好的方法是什么?
回答 0
我会使用iloc
,它根据整数位置并遵循常规python语法获取行/列切片。
df.iloc[::5, :]
回答 1
尽管@chrisb接受的答案确实回答了该问题,但我想在此添加以下内容。
我用来获取nth
数据或删除nth
行的一种简单方法如下:
df1 = df[df.index % 3 != 0] # Excludes every 3rd row starting from 0
df2 = df[df.index % 3 == 0] # Selects every 3rd raw starting from 0
这种基于算术的采样具有实现甚至更复杂的行选择的能力。
当然,这假设您有一index
列从0开始的有序,连续的整数。
回答 2
对于接受的答案,有一个甚至更简单的解决方案,涉及直接调用df.__getitem__
。
df = pd.DataFrame('x', index=range(5), columns=list('abc'))
df
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
例如,要获取每2行,您可以执行
df[::2]
a b c
0 x x x
2 x x x
4 x x x
还有GroupBy.first
/ GroupBy.head
,您对索引进行分组:
df.index // 2
# Int64Index([0, 0, 1, 1, 2], dtype='int64')
df.groupby(df.index // 2).first()
# Alternatively,
# df.groupby(df.index // 2).head(1)
a b c
0 x x x
1 x x x
2 x x x
索引被步幅(在本例中为2)划分为底数。如果索引是非数字的,请执行
# df.groupby(np.arange(len(df)) // 2).first()
df.groupby(pd.RangeIndex(len(df)) // 2).first()
a b c
0 x x x
1 x x x
2 x x x
回答 3
我也有类似的要求,但我希望特定组中的第n个物品。这就是我解决的方法。
groups = data.groupby(['group_key'])
selection = groups['index_col'].apply(lambda x: x % 3 == 0)
subset = data[selection]
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。