【问题标题】:Python renaming an aggregated columnPython重命名聚合列
【发布时间】:2021-12-24 19:05:44
【问题描述】:

这应该很容易,但由于某种原因,我不明白为什么它不起作用。我通过聚合列数据创建了一个新数据框,但我无法重命名新列。

这是我用来生成列的代码

df10pctSum = df10pct.groupby('table_name').agg({'missing_index_impact':['sum','count']}).reset_index()

这是我尝试重命名总和列的两次尝试,两次尝试都没有失败,但都没有重命名列

df10pctSum = df10pctSum.rename(columns={'(missing_index_impact, sum)':'MissingSum'})
df10pctSum = df10pctSum.rename(columns={'missing_index_impact, sum':'MissingSum'})

df10pctSum.info() 显示了这个

 #   Column                         Non-Null Count  Dtype  
---  ------                         --------------  -----  
 0   (table_name, )                 37 non-null     object 
 1   (missing_index_impact, sum)    37 non-null     float64
 2   (missing_index_impact, count)  37 non-null     int64  
dtypes: float64(1), int64(1), object(1)
memory usage: 1016.0+ bytes 

我想重命名所有这些,但我什至不能重命名一个。有什么想法吗?

【问题讨论】:

  • 请参阅How to Ask 并提供一个可重现的最小示例。您发布的代码不足以描述您在做什么,因为它缺少定义,例如 df10pct

标签: python python-3.x pandas dataframe


【解决方案1】:

我们可以传递元组或使用pd.NamedAgg 为聚合列提供自定义名称。

  • From Named Aggregation Docs(emphasis mine):

    值是元组,其第一个元素是要选择的列,第二个元素是要应用于该列的聚合。 pandas 为 pandas.NamedAgg 命名元组提供了 ['column', 'aggfunc'] 字段,以便更清楚地了解参数是什么。

df10pct.groupby('table_name').agg(
    Missingsum=("missing_index_impact", "sum"),
    Missingcount=("missing_index_impact", "count"),
)

# or

df10pct.groupby('table_name').agg(
    Missingsum=pd.NamedAgg("missing_index_impact", "sum"),
    Missingcount=pd.NamedAgg("missing_index_impact", "count"),
)

你用过

_.agg({'missing_index_impact':['sum','count']})

但这会给出一个MultiIndex 列。因此,尝试使用重命名

_.rename(columns={'(missing_index_impact, sum)':'MissingSum'})

没用。

【讨论】:

  • 是的,这行得通。很好的解释,谢谢! @Ch3steR
  • @LeoTorres 很高兴这很有帮助。添加了文档链接,您可以阅读有关“命名聚合”的更多信息。
猜你喜欢
  • 2015-07-11
  • 1970-01-01
  • 2016-11-29
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多