繁体   English   中英

Python / Pandas-选择列和行以应用方程式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM