Python 将每列的最后N个正值提取到新的数据帧中

Python 将每列的最后N个正值提取到新的数据帧中,python,pandas,Python,Pandas,我想为每列提取最后N个大于0的值,并将它们保存在新的数据帧中。你能给我建议一个有效的方法吗?谢谢大家! ##df A 0 1 1 2 2 3 3 0 4 -1 5 3 6 4 7 -5 N = 2 df[df['A'] > 0].tail(N) 假设您有这样一个数据帧,N是3: 0 1 2 0 1 -5 2 1 8 -5 -5 2 1 5 9 3 6 7 -6 4 -3 -6 -1 5

我想为每列提取最后N个大于0的值,并将它们保存在新的数据帧中。你能给我建议一个有效的方法吗?谢谢大家!

##df   

   A
0  1
1  2
2  3
3  0
4 -1
5  3
6  4
7 -5

N = 2
df[df['A'] > 0].tail(N)



假设您有这样一个数据帧,
N
是3:

    0   1   2
0   1   -5  2
1   8   -5  -5
2   1   5   9
3   6   7   -6
4   -3  -6  -1
5   -7  1   9
6   -8  8   0
7   -8  3   1
8   -7  -9  7
9   5   5   -5
10  5   4   8
11  -4  -4  -2
12  -3  8   6
13  -1  1   -4
14  -3  9   4
15  -5  1   -4
16  3   6   -9
17  -4  -9  4
18  9   7   1
19  -1  -2  9

df\u out=pd.DataFrame(columns=df.columns)
对于df.列中的列:
df_out[col]=df[df>0][col].dropna().tail(3).重置索引(drop=True)
将为您提供以下输出



假设您有这样一个数据帧,
N
是3:

    0   1   2
0   1   -5  2
1   8   -5  -5
2   1   5   9
3   6   7   -6
4   -3  -6  -1
5   -7  1   9
6   -8  8   0
7   -8  3   1
8   -7  -9  7
9   5   5   -5
10  5   4   8
11  -4  -4  -2
12  -3  8   6
13  -1  1   -4
14  -3  9   4
15  -5  1   -4
16  3   6   -9
17  -4  -9  4
18  9   7   1
19  -1  -2  9

df\u out=pd.DataFrame(columns=df.columns)
对于df.列中的列:
df_out[col]=df[df>0][col].dropna().tail(3).重置索引(drop=True)
将为您提供以下输出



使用字典理解和按掩码过滤,使用和创建默认索引值,使用
drop=True
和最后一次传递到
DataFrame
构造函数:

np.random.seed(2020)
df = pd.DataFrame(np.random.randint(-5, 5, size=(10, 3)))
print (df)
   0  1  2
0 -5  3 -2
1  1 -2 -2
2  2  3 -5
3 -5  3  4
4 -2  2 -3
5 -2  1  0
6 -5 -1  3
7  1 -1 -4
8 -4  0  4
9  0  1  1

d = {c: df.loc[df[c].gt(0), c].tail(3).reset_index(drop=True) for c in df.columns}
df = pd.DataFrame(d)
print (df)
   0  1  2
0  1  2  3
1  2  1  4
2  1  1  1

使用字典理解和按掩码过滤,使用和创建默认索引值,使用
drop=True
和最后一次传递到
DataFrame
构造函数:

np.random.seed(2020)
df = pd.DataFrame(np.random.randint(-5, 5, size=(10, 3)))
print (df)
   0  1  2
0 -5  3 -2
1  1 -2 -2
2  2  3 -5
3 -5  3  4
4 -2  2 -3
5 -2  1  0
6 -5 -1  3
7  1 -1 -4
8 -4  0  4
9  0  1  1

d = {c: df.loc[df[c].gt(0), c].tail(3).reset_index(drop=True) for c in df.columns}
df = pd.DataFrame(d)
print (df)
   0  1  2
0  1  2  3
1  2  1  4
2  1  1  1

发布您的数据帧,以及预期的outputGroupby和tail imo,如果没有发布您的数据帧,很难说预期的outputGroupby和tail imo,如果没有iamklaus,很难说谢谢,但是如果我想为数据帧中的所有列,而不仅仅是列执行此操作,我该怎么做“A?您希望它们单独或作为完整的df…”iamklaus谢谢您,但是如果我希望对数据帧中的所有列执行此操作,而不仅仅是对“A”列执行此操作,我该怎么做?您希望它们单独或作为完整的df。。?