[英]Python / Pandas - Selecting columns and rows to apply equation
我有这个数据框:
ano id unit period Sales ...
business_id
9564 2012 302 s anual 5964168.52
9564 2011 303 k anual 5774707.15
2361 2013 304 s anual 3652575.31
对于每一行,如果单位为'k',我想将sales中所有接下来的列中的值乘以1000。该值应如下所示:
ano id unit period Sales ...
business_id
9564 2012 302 s anual 5964168.52
9564 2011 303 k anual 5774707000.15
2361 2013 304 s anual 3652575.31
->我想将其应用到专栏销售以及接下来的所有专栏中(所以这将是第四专栏)
我该怎么办?
这是一种方法,使用.loc
选择df.unit == 'k'
行和Sales
列。 使用*=
将这些值乘以1000
In [1518]: df.loc[df.unit == 'k', 'Sales'] *= 1000
In [1519]: df
Out[1519]:
ano id unit period Sales
business_id
9564 2012 302 s anual 5.964169e+06
9564 2011 303 k anual 5.774707e+09
2361 2013 304 s anual 3.652575e+06
如果您想要多列。
In [1526]: df
Out[1526]:
ano id unit period Sales Nsales
business_id
9564 2012 302 s anual 5964168.52 5984168.52
9564 2011 303 k anual 5774707.15 5794707.15
2361 2013 304 s anual 3652575.31 3672575.31
In [1527]: df.loc[df.unit == 'k', ['Sales', 'Nsales']] *= 1000
In [1528]: df
Out[1528]:
ano id unit period Sales Nsales
business_id
9564 2012 302 s anual 5.964169e+06 5.984169e+06
9564 2011 303 k anual 5.774707e+09 5.794707e+09
2361 2013 304 s anual 3.652575e+06 3.672575e+06
您不能将布尔索引与iloc
混合使用,但可以使用loc
和数据帧中各列的索引轻松实现相同的结果。
例如,要在上面的示例中从五个开始(只有一个)中获取与您的布尔选择匹配的每一列:
>>> df.loc[df['unit'] == 'k', df.columns[5:]]
Sales
1 5774707.15
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.