我的问题涉及使用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),则第三行和第四行将在结果数据帧中返回。
如何修改以上代码以实现此目的?
答案 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']
返回的可变序列不能用作字典键(字典键必须是不可变的对象)
因此,apply
和lambda
来解救吧! :)