Python 将数据帧中每行的顶部h值乘以k

Python 将数据帧中每行的顶部h值乘以k,python,pandas,loops,top-n,Python,Pandas,Loops,Top N,我有一个数据框,其中一些日期是行,值是列。要了解情况,df如下所示: c1 c2 c3 c4 12/12/2016 38 10 1 8 12/11/2016 44 12 17 46 12/10/2016 13 6 2 7 12/09/2016 9 16 13 26 我试图找到一种方法来迭代每一行,只将前2个值乘以k=3。结果应在现有df的新列中。任何建议或暗示都将不胜感激 谢谢 在groupby+nlargest df.

我有一个数据框,其中一些日期是行,值是列。要了解情况,df如下所示:

            c1  c2  c3  c4
12/12/2016  38  10   1   8
12/11/2016  44  12  17  46
12/10/2016  13   6   2   7
12/09/2016   9  16  13  26
我试图找到一种方法来迭代每一行,只将前2个值乘以k=3。结果应在现有df的新列中。任何建议或暗示都将不胜感激


谢谢

groupby
+
nlargest

df.update(df.stack().groupby(level=0).nlargest(2).mul(k).reset_index(level=0,drop=True).unstack())
df
Out[1036]: 
               c1    c2  c3     c4
12/12/2016  114.0  30.0   1    8.0
12/11/2016  132.0  12.0  17  138.0
12/10/2016   39.0   6.0   2   21.0
12/09/2016    9.0  48.0  13   78.0
nlargest

分区

使用
df.where
+
df.rank

n = 2
k = 3
df.where(df.rank(1, method='dense') <= len(df.columns)-n, df*k)

             c1  c2  c3   c4
12/12/2016  114  30   1    8
12/11/2016  132  12  17  138
12/10/2016   39   6   2   21
12/09/2016    9  48  13   78

我真的很抱歉,我忘了说要创建的新列是前2个值乘以3的总和。对于第一行'12/12/2016',我应该得到(38*3)+(8*3)=138再次表示歉意,因为之前没有指定此项。是的!很抱歉搞混了,肯定是(38*3)+(10*3)=144
df.assign(newcol=np.partition(df, -2)[:, -2:].sum(1) * 3)

            c1  c2  c3  c4  newcol
12/12/2016  38  10   1   8     144
12/11/2016  44  12  17  46     270
12/10/2016  13   6   2   7      60
12/09/2016   9  16  13  26     126
n = 2
k = 3
df.where(df.rank(1, method='dense') <= len(df.columns)-n, df*k)

             c1  c2  c3   c4
12/12/2016  114  30   1    8
12/11/2016  132  12  17  138
12/10/2016   39   6   2   21
12/09/2016    9  48  13   78
df['new_col'] = df.where(df.rank(1, method='dense') >= len(df.columns)-n, df*0).sum(1)*k

            c1  c2  c3  c4  new_col
12/12/2016  38  10   1   8      144
12/11/2016  44  12  17  46      270
12/10/2016  13   6   2   7       60
12/09/2016   9  16  13  26      126