pandas 如何将panda Dataframe 列与字典值相乘,其中字典键与 Dataframe 索引匹配

bf1o4zei  于 2022-12-16  发布在  其他
关注(0)|答案(2)|浏览(166)

在字典键与特定 Dataframe 列匹配的情况下,是否有比迭代列更好的方法来将列值乘以字典值?

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])

但是除了在列上迭代之外,一定还有更简洁的方法来完成这一点吧?

qncylg1j

qncylg1j1#

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
yvt65v4c

yvt65v4c2#

另一种方法

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

相关问题