Pandas use cell value as dict key to return dict value
我的问题涉及使用数据帧列中的值作为键以返回它们各自的值并运行条件。
我有一个数据框 df,其中包含一列 "count",其中包含从 1 到 8 的整数,以及一列 "category",其值是 "A"、"B" 或"C"
我有一本字典,dct,包含对 A:2, B:4, C:6
这是我的(错误的)代码:
1 | result = df[df["count"] >= dct.get(df["category"])] |
所以我想返回一个数据框,其中给定行的 "count" 值等于使用同一行中的 "category" 字母从字典中检索到的值。
因此,如果有 (1, 2, 6, 6) 的计数值和 (A, B, C, A) 的类别值,则结果数据帧中将返回第三行和第四行。
如何修改上面的代码来实现?
一个好的方法是将您的字典添加到现有数据帧中,然后在新数据帧上应用查询:
1 2 3 4 5 | 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 | result = df[df['count'] >= df['category'].apply(lambda x: dct[x])] |
你不能直接使用
所以,
按照你的逻辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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) |
输出:
1 2 3 4 5 6 7 8 9 10 | original dataframe count category 0 1 A 1 2 B 2 5 C 3 6 A final output count category 3 6 A |