我们如何根据特定规则从 DataFrame 列中的字典列表中获取最佳键值对?

How do we get an optimum key value pair from a list of dictionaries in a dataframe column based on certain rules?

我有以下数据框:

不同的'type'可以同时出现'time',但需要根据以下条件只得到'type'和'value':

我尝试使用 groupby 和字典:

grp = merged_df.groupby(['name','time'],as_index=False)[['type','value']].apply(lambda x: dict(x.values.tolist()))

这给出了这样的输出:

有没有什么办法可以根据以上两条规则得到最优的键值对,使得输出可以是:

以上是我尝试过的一种方法,这就是为什么问题是关于字典中的最佳键值对。但是,任何其他更优雅的方法也可以。

最终结果应该是:

以下答案可能不是那么优雅,因为:1. 它需要您事先创建一个字典,您在其中映射优先级 1 (t > o > f) 和 2. 绕过使用字典但应该得到工作完成:

首先,根据优先级1创建一个字典,并使用它根据'type':

创建一个新的映射列
prio_dic = {'t':'3', 'o':'2', 'f':'1'}
data["coded_type"] = data["type"].map(prio_dic)

最后,首先使用新列 'coded_type' 对值进行排序,然后使用 'value' 对值进行排序,像您一样按 'name' 和 'time' 分组并获得第一个元素每组:

res = data.sort_values(['coded_type', 'value', ], ascending=False).groupby(['name', 'time'], as_index=False).first()

不幸的是,这需要删除新列的额外步骤:

res.drop('coded_type', axis=1)