使用转换的熊猫分组列表聚合失败并出现键错误

Posted

技术标签:

【中文标题】使用转换的熊猫分组列表聚合失败并出现键错误【英文标题】:pandas grouped list aggregation using transform fails with key error 【发布时间】:2021-03-07 04:20:30 【问题描述】:

如何将list 函数应用于未使用apply 而是使用transform 聚合的分组pandas dataframe

对我来说,以下失败:KeyError: "None of [Index(['v1', 'v2'], dtype='object')] are in the [index]"

import pandas as pd
df = pd.DataFrame('key':[1,1,1,2,3,2], 'v1': [1,4,6,7,4,9], 'v2':[0.3, 0.6, 0.4, .1, .2, .8])
display(df)

def list_function(x):
    #display(x)
    all_values = x[['v1','v2']].drop_duplicates()
    #display(all_values)
    #result = all_values.to_json()
    result = all_values.values
    return result


display(df.groupby(['key']).apply(list_function))
df['list_result'] = df.groupby(['key']).transform(list_function)
df

注意:我知道聚合数据可以进行联接,但在这种特殊情况下,我不希望之后再进行联接。

【问题讨论】:

【参考方案1】:

这是不可能的,在 pandas GroupBy.transformGroupBy.agg 中分别处理每一列,所以不能像你需要的那样通过多个列名进行选择。

只有GroupBy.apply才有可能。

所以transform 可以改用Series.map,如果匹配一列,多列使用DataFrame.join

df['list_result'] = df['key'].map(df.groupby(['key']).apply(list_function))
print (df)

   key  v1   v2                           list_result
0    1   1  0.3  [[1.0, 0.3], [4.0, 0.6], [6.0, 0.4]]
1    1   4  0.6  [[1.0, 0.3], [4.0, 0.6], [6.0, 0.4]]
2    1   6  0.4  [[1.0, 0.3], [4.0, 0.6], [6.0, 0.4]]
3    2   7  0.1              [[7.0, 0.1], [9.0, 0.8]]
4    3   4  0.2                          [[4.0, 0.2]]
5    2   9  0.8              [[7.0, 0.1], [9.0, 0.8]]

#added one column for match by 2 columns sample
df['new'] = 1

s = df.groupby(['key', 'new']).apply(list_function)
df = df.join(s.rename('list_result'), on=['key','new'])
print (df)
   key  v1   v2  new                           list_result
0    1   1  0.3    1  [[1.0, 0.3], [4.0, 0.6], [6.0, 0.4]]
1    1   4  0.6    1  [[1.0, 0.3], [4.0, 0.6], [6.0, 0.4]]
2    1   6  0.4    1  [[1.0, 0.3], [4.0, 0.6], [6.0, 0.4]]
3    2   7  0.1    1              [[7.0, 0.1], [9.0, 0.8]]
4    3   4  0.2    1                          [[4.0, 0.2]]
5    2   9  0.8    1              [[7.0, 0.1], [9.0, 0.8]]

【讨论】:

这样更好!太好了。

以上是关于使用转换的熊猫分组列表聚合失败并出现键错误的主要内容,如果未能解决你的问题,请参考以下文章

仅在函数中使用合并时才出现熊猫键错误

将熊猫数据框转换为具有多个键的字典

获取数据框列表并按变量分组,并使用该变量作为字典的键

将分组的聚合唯一列添加到熊猫数据框

如何修复 BigQuery 中的错误“选择列表表达式 [...] 既不分组也不聚合的引用”?

使用 JPA 语法时,具有复杂键类的 JpaRepository 验证失败并出现错误“方法查询验证失败”