熊猫使用单元格值作为字典键以返回字典值

时间:2019-02-19 22:33:32

标签: python pandas dataframe

我的问题涉及使用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),则第三行和第四行将在结果数据帧中返回。

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

3 个答案:

答案 0 :(得分:3)

一种好的方法是将字典添加到现有数据框中,然后对新数据框进行查询:

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

答案 1 :(得分:0)

遵循您的逻辑:

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

答案 2 :(得分:0)

对您的代码进行少量修改:

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

您不能直接使用dct.get(df['category']),因为df['category']返回的可变序列不能用作字典键(字典键必须是不可变的对象) 因此,applylambda来解救吧! :)