Python 在每3行中选择2行并列出结果
假设我有以下数据帧:Python 在每3行中选择2行并列出结果,python,pandas,compare,Python,Pandas,Compare,假设我有以下数据帧: 。第1栏第2栏 0 25 1 1 89 2 2 59 3 3 78 10 4 99 20 5 38 30 6 89 100 7 57 200 8 87 300 我不确定我想做的事是否不可能。但我想比较col
。第1栏第2栏
0 25 1
1 89 2
2 59 3
3 78 10
4 99 20
5 38 30
6 89 100
7 57 200
8 87 300
我不确定我想做的事是否不可能。但我想比较column1的每三行,然后从三行中取出最高的2,并将相应的2 Column2值分配给一个新列。第3列中的值与是否连接无关。不管它们是否排列,因为我知道第3列的每2行属于第1列的每3行
。第1栏第2栏第3栏
0 25 1 2
1 89 2 3
2 59 3
3 78 10 20
4 99 20 10
5 38 30
6 89 100 100
7 57 200 300
8 87 300
您可以使用创建分组数组,该数组每3个值分组一次
然后使用然后使用提取这些值的索引,然后将它们分配给Column3
handles
要获得问题中提到的输出,您必须排序并将NaN
推到最后,然后执行此附加步骤
df['Column3'] = df.groupby(g)['Column3'].apply(lambda x:x.sort_values()).values
Column1 Column2 Column3
0 25 1 2.0
1 89 2 3.0
2 59 3 NaN
3 78 10 10.0
4 99 20 20.0
5 38 30 NaN
6 89 100 100.0
7 57 200 300.0
8 87 300 NaN
如果我想比较10并使用4中的最佳值,我在哪里替换这些值,因为如果我在有3的地方替换10,在有2的地方替换4,我会得到
值错误:Grouper和axis必须是相同长度的计算出来了。我的数据帧不是10的倍数
df['Column3'] = df.groupby(g)['Column3'].apply(lambda x:x.sort_values()).values
Column1 Column2 Column3
0 25 1 2.0
1 89 2 3.0
2 59 3 NaN
3 78 10 10.0
4 99 20 20.0
5 38 30 NaN
6 89 100 100.0
7 57 200 300.0
8 87 300 NaN