繁体   English   中英

如何将 pandas 数据框列与字典键与数据框索引匹配的字典值相乘

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM