【问题标题】:Pandas Cut Categorical Treating Nan as Additional Max BinPandas 将 Nan 分类为额外的 Max Bin
【发布时间】:2021-11-03 14:43:27
【问题描述】:

我有一个 Pandas 数据框,我在其中跨两个分箱列运行最大值。我希望 max 将 nan (我将其替换为 'NA')作为最大可能的 bin。在重新分类数据帧并添加此附加 bin 时,max 没有正确地将新的 NA 视为新的最大值。我不确定在跨两个合并列执行 max 时是否有更好的方法将空白和 NaN 值视为单独的最大 bin。

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1':[10, 22, 25],
    'col2':[11,15,np.nan]
})

bins = [-float('inf'),10,20,30,float("inf")]   
labels = ['Tier 1', 'Tier 2', 'Tier 3', 'Tier 4']

print(df)

df['col1'] = pd.cut(pd.to_numeric(df['col1'], errors='coerce'), bins=bins, labels=labels)
df['col1'] = pd.Categorical(df['col1'], categories=['Tier 1', 'Tier 2', 'Tier 3', 'Tier 4', 'NA'], ordered=True)
df['col1'].fillna('NA', inplace=True)    
df['col2'] = pd.cut(pd.to_numeric(df['col2'], errors='coerce'), bins=bins, labels=labels)
df['col2'] = pd.Categorical(df['col2'], categories=['Tier 1', 'Tier 2', 'Tier 3', 'Tier 4', 'NA'], ordered=True)
df['col2'].fillna('NA', inplace=True)    

print(df)

df.max(axis=1)

【问题讨论】:

  • pd.cut(series.fillna(np.inf), ...)?
  • 请不要发布代码图片...
  • 我喜欢这个想法,但第 4 层目前被用于所有值到无穷大。我仍然希望这个 bin 以某种方式在连续序列之外,并且在跨行运行 max 时只显示 NA。

标签: python pandas max cut bins


【解决方案1】:

似乎在跨列运行 max 时,它没有使用类别作为优先级,而是使用字母顺序。我只是将 NA 重命名为 ZNA,然后在合并后替换为 NA。

如果在具有相同类别的两个类别列上运行 max 使其假定类别而不是字母顺序,则可能是未来的增强。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2021-05-06
    • 2017-06-21
    相关资源
    最近更新 更多