为了账号安全,请及时绑定邮箱和手机立即绑定

将数据帧 python 中每一行的前 h 个值乘以 k

将数据帧 python 中每一行的前 h 个值乘以 k

翻过高山走不出你 2021-07-13 16:08:33
我有一个数据框,其中一些日期作为行和列中的值。要了解 df 如下所示:            c1  c2  c3  c412/12/2016  38  10   1   812/11/2016  44  12  17  4612/10/2016  13   6   2   712/09/2016   9  16  13  26我试图找到一种方法来迭代每一行并只将前 2 个值乘以 k = 3。结果应该在现有 df 的新列中。任何建议或提示都非常感谢!
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

nlargest

df.assign(newcol=df.apply(sorted, 1).iloc[:, -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

partition

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


查看完整回答
反对 回复 2021-07-27
?
MMTTMM

TA贡献1869条经验 获得超4个赞

update在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


查看完整回答
反对 回复 2021-07-27
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

与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

为了解决您的更新,您仍然可以使用 where + rank,尽管它似乎不如上述操作适合。


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


查看完整回答
反对 回复 2021-07-27
  • 3 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号