我有这个数据框:
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
- >我想将它应用于列销售和所有下一个(因此这将是第四列和之后)
我怎么能这样做?
答案 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