我的问题与使用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']
返回一个可变的序列,该系列无法用作字典键(字典键需要是不可变的对象)因此,apply
和lambda
进行营救!:)