Dataframe.resample()仅适用于时间序列数据。我无法从非时间序列数据中找到每n行。最好的方法是什么?
当前回答
虽然@chrisb接受的答案确实回答了这个问题,但我想补充以下内容。
我使用一个简单的方法来获取第n个数据或删除第n行如下:
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
这种基于算法的采样能够支持更复杂的行选择。
当然,这假设您有一个从0开始的有序连续整数的索引列。
其他回答
我将使用iloc,它接受一个行/列切片,既基于整数位置,又遵循正常的python语法。如果你想要每5行:
df.iloc[::5, :]
对于已接受的答案,还有一个更简单的解决方案,它涉及直接调用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。头,你在指数上分组:
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
索引由stride(在本例中为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
将reset_index()添加到metastableB的答案中允许您只需要假设行是有序且连续的。
df1 = df[df.reset_index().index % 3 != 0] # Excludes every 3rd row starting from 0
df2 = df[df.reset_index().index % 3 == 0] # Selects every 3rd row starting from 0
df.reset_index()。Index将创建一个从0开始,以1为增量的索引,允许您轻松使用模数。
虽然@chrisb接受的答案确实回答了这个问题,但我想补充以下内容。
我使用一个简单的方法来获取第n个数据或删除第n行如下:
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
这种基于算法的采样能够支持更复杂的行选择。
当然,这假设您有一个从0开始的有序连续整数的索引列。
df.drop(labels=df[df.index % 3 != 0].index, axis=0) # every 3rd row (mod 3)
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录