使用样本,将函数应用于大的列子集

时间:2014-05-03 23:12:25

标签: python python-2.7 pandas

我的数据包含来自存储在pandas DataFrame中的几个不同国家/地区的费率分布的1,000个样本:

                  s1      s2  ...   s1000  pop
region  country
NA      USA       0.25    0.27      0.23   300
        CAN       0.16    0.14      0.13   35
LA      MEX       ...

我需要将每个样本乘以人口。为了实现这一点,我目前有:

for column in data.filter(regex='sample'):
    data[column] = data[column]*data['pop']

虽然这有效,但迭代列感觉它违背了python和numpy的精神。有没有更自然的方式我没有看到?我通常会使用apply,但我不知道如何使用apply并仍然获得每行的唯一总体值。

更多背景:我需要进行这种乘法的原因是因为我想按区域聚合数据,例如将USA和CAN折叠到北美。但是,因为我的数据是费率,所以我不能简单地添加 - 我必须乘以人口才能将它们变成计数。

1 个答案:

答案 0 :(得分:2)

我可能会做类似

的事情
>>> df
                  s1    s2  s1000  pop
region country                        
NaN    USA      0.25  0.27   0.23  300
       CAN      0.16  0.14   0.13   35

[2 rows x 4 columns]
>>> df.iloc[:,:-1] = df.iloc[:, :-1].mul(df["pop"], axis=0)
>>> df
                  s1    s2  s1000  pop
region country                        
NaN    USA      75.0  81.0  69.00  300
       CAN       5.6   4.9   4.55   35

[2 rows x 4 columns]

而不是iloc - 除了最后一列之外的每一列都可以使用任何其他基于loc的过滤器。