在汇总多个包含分类列的列时,我在pandas
0.25.2中遇到了一个问题。
import pandas as pd
df = pd.DataFrame({
"col1": [1, 3, 4, 1],
"col2": pd.Categorical(["b", "a", "c", "b"], categories=["a", "b", "c"], ordered=False),
"col3": [4, 5, 3, 2]
})
df_agg = df.groupby("col1").agg(
col2=pd.NamedAgg("col2", "first"),
col3_max=pd.NamedAgg("col3", "max")
)
print(df_agg)
输出:
col2 col3_max
0 b NaN
1 a 4.0
2 c NaN
3 NaN 5.0
4 NaN 3.0
预期输出:
col2 col3_max
1 b 4
3 a 5
4 c 3
该问题似乎是由于以下汇总类别列的行为引起的。
df_grouped_col2 = df.groupby("col1")["col2"].first()
print(type(df_grouped_col2))
print(df_grouped_col2)
输出:
<class 'pandas.core.arrays.categorical.Categorical'>
[b, a, c]
Categories (3, object): [a, b, c]
这是一个错误吗?如果是这样,是否有解决方法?
答案 0 :(得分:4)
我认为它是bug,但可能的解决方案是将lambda函数与iat
一起用于组的第一个值:
df_agg = df.groupby("col1").agg(
col2=pd.NamedAgg("col2", lambda x: x.iat[0]),
col3_max=pd.NamedAgg("col3", "max")
)
print(df_agg)
col2 col3_max
col1
1 b 4
3 a 5
4 c 3
df_grouped_col2 = df.groupby("col1")["col2"].agg(lambda x: x.iat[0])
print(type(df_grouped_col2))
<class 'pandas.core.series.Series'>
print(df_grouped_col2)
col1
1 b
3 a
4 c
Name: col2, dtype: object