从 pandas 数据框中提取组观察
Extracting group observations from pandas dataframe
我有一个 pandas 数据框。我想从数据框的每个子组中提取一定数量的观察结果并将它们放入一个新的数据框中。例如,假设我们有以下数据框:
Var1 Var2
0 1 1.2
1 2 1.3
2 2 1.4
3 1 1.5
4 1 1.6
5 2 1.7
6 1 1.8
7 1 1.9
8 2 2.0
9 1 2.1
10 2 2.2
11 1 2.3
我想先按var1排序:
Var1 Var2
0 1 1.2
1 1 1.5
2 1 1.6
3 1 1.8
4 1 1.9
5 1 2.1
6 1 2.3
7 2 1.3
8 2 1.4
9 2 1.7
10 2 2.0
11 2 2.2
然后保留每组的前两个观察值并将它们放入新的数据框:
Var1 Var2
0 1 1.2
1 1 1.5
2 2 1.3
3 2 1.4
我知道如何使用group by,但我不清楚如何执行第二步。非常感谢您的帮助。
使用sort_values
with groupby
and head
:
df = df.sort_values('Var1').groupby('Var1').head(2).reset_index(drop=True)
print (df)
Var1 Var2
0 1 1.2
1 1 1.5
2 2 1.3
3 2 1.4
df = df.groupby('Var1').head(2).sort_values('Var1').reset_index(drop=True)
print (df)
Var1 Var2
0 1 1.2
1 1 1.5
2 2 1.3
3 2 1.4
另一个解决方案iloc
:
df = df.groupby('Var1')['Var2']
.apply(lambda x: x.iloc[:2])
.reset_index(level=1, drop=True)
.reset_index()
print (df)
Var1 Var2
0 1 1.2
1 1 1.5
2 2 1.3
3 2 1.4
注:
对于 pandas 的旧版本,将 sort_values
更改为 sort
,而是升级到最新版本。
我有一个 pandas 数据框。我想从数据框的每个子组中提取一定数量的观察结果并将它们放入一个新的数据框中。例如,假设我们有以下数据框:
Var1 Var2
0 1 1.2
1 2 1.3
2 2 1.4
3 1 1.5
4 1 1.6
5 2 1.7
6 1 1.8
7 1 1.9
8 2 2.0
9 1 2.1
10 2 2.2
11 1 2.3
我想先按var1排序:
Var1 Var2
0 1 1.2
1 1 1.5
2 1 1.6
3 1 1.8
4 1 1.9
5 1 2.1
6 1 2.3
7 2 1.3
8 2 1.4
9 2 1.7
10 2 2.0
11 2 2.2
然后保留每组的前两个观察值并将它们放入新的数据框:
Var1 Var2
0 1 1.2
1 1 1.5
2 2 1.3
3 2 1.4
我知道如何使用group by,但我不清楚如何执行第二步。非常感谢您的帮助。
使用sort_values
with groupby
and head
:
df = df.sort_values('Var1').groupby('Var1').head(2).reset_index(drop=True)
print (df)
Var1 Var2
0 1 1.2
1 1 1.5
2 2 1.3
3 2 1.4
df = df.groupby('Var1').head(2).sort_values('Var1').reset_index(drop=True)
print (df)
Var1 Var2
0 1 1.2
1 1 1.5
2 2 1.3
3 2 1.4
另一个解决方案iloc
:
df = df.groupby('Var1')['Var2']
.apply(lambda x: x.iloc[:2])
.reset_index(level=1, drop=True)
.reset_index()
print (df)
Var1 Var2
0 1 1.2
1 1 1.5
2 2 1.3
3 2 1.4
注:
对于 pandas 的旧版本,将 sort_values
更改为 sort
,而是升级到最新版本。