熊猫使用单元格值作为dict键来返回dict值



我的问题与使用dataframe列中的值作为键,以返回其相应的值并运行条件。

我有一个数据框,DF,包含一个列"计数",其整数从1到8和一个列"类别",该列具有" A"," B"或" C"

的值

我有一个字典,dct,包含对a:2,b:4,c:6

这是我的(不正确的)代码:

result = df[df["count"] >= dct.get(df["category"])]

因此,我想返回一个数据框,其中给定行的"计数"值等于使用同一行中的"类别"字母从字典中检索的值大。

因此,如果有(1、2、6、6)的计数值和(a,b,c,a)的类别值,则将在结果范围内返回第三和第三行。

如何修改上述代码以实现此目标?

一个好方法是将您的字典添加到现有数据框架中,然后在新的数据框架上应用查询:

import pandas as pd
df = pd.DataFrame(data={'count': [4, 5, 6], 'category': ['A', 'B', 'C']})
dct = {'A':5, 'B':4, 'C':-1}
df['min_count'] = df['category'].map(dct)
df = df.query('count>min_count')

遵循逻辑:

import pandas as pd
dct = {'A':2, 'B':4, 'C':6}
df = pd.DataFrame({'count':[1,2,5,6],
                   'category':['A','B','C','A']})
print('original dataframe')
print(df)
def process_row(x):
    return True if x['count'] >= dct[x['category']] else False
f = df.apply(lambda row: process_row(row), axis=1)
df = df[f]
print('final output')
print(df)

输出:

original dataframe
   count category
0      1        A
1      2        B
2      5        C
3      6        A
final output
   count category
3      6        A

对您的代码进行了小修改:

result = df[df['count'] >= df['category'].apply(lambda x: dct[x])]

您不能直接使用dct.get(df['category']),因为df['category']返回一个可变的序列,该系列无法用作字典键(字典键需要是不可变的对象)因此,applylambda进行营救!:)

最新更新