Python / Pandas - 选择要应用方程的列和行

时间:2017-08-24 17:16:41

标签: python pandas

我有这个数据框:

              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',我想将列销售中的值乘以所有下一个的乘以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   

- >我想将它应用于列销售和所有下一个(因此这将是第四列和之后)

我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

这是一种方法,使用.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

答案 1 :(得分:1)

您不能将布尔索引与iloc混合使用,但您可以使用loc轻松实现相同的结果,并对数据框中的列进行索引。

例如,要从上面的示例(只有一个)中获取与您的布尔选择匹配的五列以上的每一列:

>>> df.loc[df['unit'] == 'k', df.columns[5:]]
        Sales
1  5774707.15