Pandas和Dictionary -将df列名与字典键匹配,然后检索值以计算该列的值

f45qwnt8  于 2023-03-21  发布在  其他
关注(0)|答案(2)|浏览(111)

我有两个dataframes在2个单独的.csv文件中,第一个是:

Apple.count.out Orange.count.out Banana.count.out
Total stock   1000              500            1000
average_price   2                2              0.5

我已经把第一个词译成了字典

fruit={'apple':1000,'orange':500,'banana':1000}

df2由store_name列表组成,其中包含单个水果的库存,如下所示:

apple    orange   banana
store_a    60       25       100
store_b    100      25       200
store_c    200      100      200
store_d    300      300     200

我的任务是使用字典中的值来规范化各个商店中各自食物的库存,因为不同水果的库存总数是不同的。我想到匹配字典名称,检索键并编写一个函数来循环每一列,以将每个商店中的计数除以计数总数。(字典中的值),如果列名与键匹配。将一些东西变成这样:

apple    orange      banana
store_a    0.06      0.05        0.1
store_b    0.10      0.05        0.2
store_c    0.20      0.20        0.2
store_d    0.30      0.60        0.2

我需要log10转换每个值。我尝试使用以下函数:

import numpy as np
import pandas as pd

fruits = ['apple','orange','banana']
df2[fruits] = df2[fruits].apply(lambda x: (x/t) if t = df2.columns.values for t,u in fruit.items())
df2[fruits] = np.log10(df2[fruits])

但是这个功能似乎不能正常工作,我不知道这个功能是否足够优雅?我可以有一些建议,如何改善它?
当我硬编码第一个df的字典时,是否有另一种方法来构造一个函数,将它们转换为字典?

tjrkku2a

tjrkku2a1#

您可以用途:

fruit = df1.rename(columns=lambda x: x.split('.')[0].lower()).loc['Total stock']
out = df2 / fruit

输出:

>>> out
         apple  orange  banana
store_a   0.06    0.05     0.1
store_b   0.10    0.05     0.2
store_c   0.20    0.20     0.2
store_d   0.30    0.60     0.2

>>> np.log10(out)
            apple    orange   banana
store_a -1.221849 -1.301030 -1.00000
store_b -1.000000 -1.301030 -0.69897
store_c -0.698970 -0.698970 -0.69897
store_d -0.522879 -0.221849 -0.69897
0s7z1bwu

0s7z1bwu2#

我们去吧

np.log10(df2 / pd.Series(fruit))
apple    orange   banana
store_a -1.221849 -1.301030 -1.00000
store_b -1.000000 -1.301030 -0.69897
store_c -0.698970 -0.698970 -0.69897
store_d -0.522879 -0.221849 -0.69897

相关问题