Python/panda选择要应用公式的列和行

2024-04-26 22:45:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个数据帧:

              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   

-->;我想在sales列和以后的所有列中应用它(因此这将是第四列,以此类推)

我怎么能这么做?你知道吗


Tags: 数据gtidunit单位businessperiodsales
2条回答

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

相关问题 更多 >