如何根据列值对 pandas 数据框进行切片?
how to slice a pandas data frame according to column values?
我有一个 pandas 数据框,格式如下:
year col1
y1 val_1
y1 val_2
y1 val_3
y2 val_4
y2 val_5
y2 val_6
y3 val_7
y3 val_8
y3 val_9
我如何 select 仅显示第 2 年之前的值并忽略第 3 年?
我需要一个new_data框架如下:
year col1
y1 val_1
y1 val_2
y1 val_3
y2 val_4
y2 val_5
y2 val_6
y1, y2, y3
表示年份值
在您的示例数据集上,以下工作:
In [35]:
df.iloc[0:df[df.year == 'y3'].index[0]]
Out[35]:
year col1
0 y1 val_1
1 y1 val_2
2 y1 val_3
3 y2 val_4
4 y2 val_5
5 y2 val_6
因此将其分解,我们执行布尔索引以查找等于年份值的行:
In [36]:
df[df.year == 'y3']
Out[36]:
year col1
6 y3 val_7
7 y3 val_8
8 y3 val_9
但是我们对索引感兴趣,所以我们可以用它来切片:
In [37]:
df[df.year == 'y3'].index
Out[37]:
Int64Index([6, 7, 8], dtype='int64')
但是我们只需要切片的第一个值因此调用 index[0]
,但是如果你的 df 已经按年份值排序那么只执行 df[df.year < y3]
会更简单并且有效。
我有一个 pandas 数据框,格式如下:
year col1
y1 val_1
y1 val_2
y1 val_3
y2 val_4
y2 val_5
y2 val_6
y3 val_7
y3 val_8
y3 val_9
我如何 select 仅显示第 2 年之前的值并忽略第 3 年?
我需要一个new_data框架如下:
year col1
y1 val_1
y1 val_2
y1 val_3
y2 val_4
y2 val_5
y2 val_6
y1, y2, y3
表示年份值
在您的示例数据集上,以下工作:
In [35]:
df.iloc[0:df[df.year == 'y3'].index[0]]
Out[35]:
year col1
0 y1 val_1
1 y1 val_2
2 y1 val_3
3 y2 val_4
4 y2 val_5
5 y2 val_6
因此将其分解,我们执行布尔索引以查找等于年份值的行:
In [36]:
df[df.year == 'y3']
Out[36]:
year col1
6 y3 val_7
7 y3 val_8
8 y3 val_9
但是我们对索引感兴趣,所以我们可以用它来切片:
In [37]:
df[df.year == 'y3'].index
Out[37]:
Int64Index([6, 7, 8], dtype='int64')
但是我们只需要切片的第一个值因此调用 index[0]
,但是如果你的 df 已经按年份值排序那么只执行 df[df.year < y3]
会更简单并且有效。