gpt4 book ai didi

python - Pandas 的 groupby 不处理 agg 函数中的分类列

转载 作者:行者123 更新时间:2023-12-05 03:23:18 25 4
gpt4 key购买 nike

我有一个包含 3 列的数据框,其中两列是分类数据,一列是 float16。当我执行 groupby 并在 agg 中运行 lambda 特定函数以根据 dtype 以不同方式处理每一列时,分类列上有一个下降。

如果这样做,它确实有效。

i=pd.DataFrame({"A":["a","a","a","b","c","c"],"B":[1,2,3,4,5,6],"C":[ "NaN" ,"b","NaN","b","c","c"]})
i['A'] = i['A'].astype('category')
i['B'] = i['B'].astype('float16')
i.groupby("A", as_index=False)[["B","C"]].agg(lambda x: x.mean() if np.dtype(x)=='float16' else x.value_counts().index[0])

我想要得到的输出是:

    A   B   C
0 a 2.0 NaN
1 b 4.0 b
2 c 5.5 c

但是,每当我将 C 列声明为分类时,python 会自动删除 C 列。

i=pd.DataFrame({"A":["a","a","a","b","c","c"],"B":[1,2,3,4,5,6],"C":[ "NaN" ,"b","NaN","b","c","c"]})
i['A'] = i['A'].astype('category')
i['B'] = i['B'].astype('float16')
i['C'] = i['C'].astype('category')
i.groupby("A", as_index=False)[["B","C"]].agg(lambda x: x.mean() if np.dtype(x)=='float16' else x.value_counts().index[0])

答案如下:

['C'] did not aggregate successfully. If any error is raised this will raise in a future version of pandas. Drop these columns/ops to avoid this warning.

A B
0 a 2.0
1 b 4.0
2 c 5.5

有谁知道 groupby 的 agg 是否无法处理分类列?

最佳答案

category 是一种 pandas 数据类型。 numpy 不一定能很好地使用它(np.dtype(i.C) 给出错误)。使用 pandas.Series.dtype,它应该会按预期工作。

foo = lambda x: x.mean() if x.dtype =='float16' else x.value_counts().index[0]
i.groupby("A", as_index=False)[["B","C"]].agg(foo)
# A B C
# 0 a 2.0 NaN
# 1 b 4.0 b
# 2 c 5.5 c

关于python - Pandas 的 groupby 不处理 agg 函数中的分类列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72551544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com