我的数据包含来自存储在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折叠到北美。但是,因为我的数据是费率,所以我不能简单地添加 - 我必须乘以人口才能将它们变成计数。
答案 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的过滤器。