![](/img/trans.png)
[英]Multiply numpy to dataframe where index number in numpy matches the dataframe value
[英]How to multiply pandas dataframe columns with dictionary value where dictionary key matches dataframe index
有没有比迭代列以将列值乘以字典键匹配特定数据框列的字典值更好的方法? 给出一个数据框:
import pandas as pd
df = pd.DataFrame({
'category': [1,2,3,4,5],
'a': [5,4,3,3,4],
'b': [3,2,4,3,10],
'c': [3, 2, 1, 1, 1]
})
和一本字典:
lookup = {1:0, 2:4, 3:1, 4:6, 5:2}
我可以将“category”以外的每一列乘以键与“category”匹配的字典值:
for t in df.columns[1:]:
df[t] = df[t].mul(df['category'].map(lookup)).fillna(df[t])
但是除了遍历列之外,必须有一种更简洁的方法来做到这一点吗?
import pandas as pd
df = pd.DataFrame({
'category': [1,2,3,4,5],
'a': [5,4,3,3,4],
'b': [3,2,4,3,10],
'c': [3, 2, 1, 1, 1]
})
lookup = {1:0, 2:4, 3:1, 4:6, 5:2}
out = df.set_index("category").mul(lookup, axis=0).reset_index()
print(out)
输出:
category a b c
0 1 0 0 0
1 2 16 8 8
2 3 3 4 1
3 4 18 18 6
4 5 8 20 2
其它的办法
df.iloc[:,1:] =df.iloc[:,1:].mul(pd.Series(df['category'].map(lookup)), axis=0)
category a b c
0 1 0 0 0
1 2 16 8 8
2 3 3 4 1
3 4 18 18 6
4 5 8 20 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.