首页 > 解决方案 > 使用与列名值匹配的键创建新列

问题描述

创建一个新列列出每个索引的正确水果计数的最佳方法是什么。

# create dummy data    
import pandas as pd
    inp = [{'Fruit':'Apple', 'Apple_count':100, 'Orange_count':10, 'Banana_count':50, 'Pear_count':200}, 
           {'Fruit':'Apple', 'Apple_count':100, 'Orange_count':10, 'Banana_count':50, 'Pear_count':200}, 
           {'Fruit':'Apple', 'Apple_count':100, 'Orange_count':10, 'Banana_count':50, 'Pear_count':200},
           {'Fruit':'Orange', 'Apple_count':100, 'Orange_count':10, 'Banana_count':50, 'Pear_count':200},
           {'Fruit':'Orange', 'Apple_count':100, 'Orange_count':10, 'Banana_count':50, 'Pear_count':200},
           {'Fruit':'Banana', 'Apple_count':100, 'Orange_count':10, 'Banana_count':50, 'Pear_count':200},
           {'Fruit':'Pear', 'Apple_count':100, 'Orange_count':10, 'Banana_count':50, 'Pear_count':200}]
    df = pd.DataFrame(inp)

    Fruit  Apple_count  Orange_count  Banana_count  Pear_count
0   Apple          100            10            50         200
1   Apple          100            10            50         200
2   Apple          100            10            50         200
3  Orange          100            10            50         200
4  Orange          100            10            50         200
5  Banana          100            10            50         200
6    Pear          100            10            50         200

我想为每个行索引创建一个新列,其中包含水果类别的相应计数。

期望的输出:

    Fruit  Apple_count  Orange_count  Banana_count  Pear_count  Fruit_count
0   Apple          100            10            50         200          100
1   Apple          100            10            50         200          100
2   Apple          100            10            50         200          100
3  Orange          100            10            50         200           10
4  Orange          100            10            50         200           10
5  Banana          100            10            50         200          200
6    Pear          100            10            50         200           50

我可以写一堆loc条件句,但在我的例子中,类别比这个例子中列出的要多得多。

Fruit我还有一个 dict和Fruit_count列名的键值对。

fruit_dict = {'Apple':'Apple_count', 'Orange':'Orange_count', 'Banana':'Banana_count', 'Pear':'Pear_count'}

标签: pythonpython-3.xpandasnumpy

解决方案


这似乎对我有用!

df["Fruit_count"] = df["Fruit"].apply(lambda x: f"{x}_count").map(df.iloc[0])

或者,如果您想使用fruit_dict

df["Fruit_count"] = df["Fruit"].map(fruit_dict).map(df.iloc[0])

推荐阅读