【问题标题】:Pandas creating extra (duplicated) index after groupby and nlargestPandas 在 groupby 和 nlargest 之后创建额外(重复)索引
【发布时间】:2017-10-19 20:09:36
【问题描述】:

我尝试使用stack().groupby().nlargest().unstack() 链在 Pandas 数据框中找到每一行中最大的 N 个元素。但是,有时原始索引会重复。其他时候则不然。这种行为的不一致导致后续处理非常困难。有谁知道是什么触发了差异,以及如何强制保持一致性?

例如,这里有一个索引[x y z]在末尾重复的情况:

>>> df = pd.DataFrame({'A':[np.nan,8,9], 'B':[0,np.nan,5], 'C':[2, 10, np.nan]}, index='x y z'.split())
>>> df
     A    B     C
x  NaN  0.0   2.0
y  8.0  NaN  10.0
z  9.0  5.0   NaN
>>> df.stack().groupby(level=0).nlargest(1).unstack()
       A     C
x x  NaN   2.0
y y  NaN  10.0
z z  9.0   NaN

而在这种情况下它不是:

>>> df1 = pd.DataFrame({'A':[np.nan,np.nan,9], 'B':[0,np.nan,np.nan], 'C':[np.nan, 10, np.nan]}, index='x y z'.split())
>>> df1
     A    B     C
x  NaN  0.0   NaN
y  NaN  NaN  10.0
z  9.0  NaN   NaN
>>> df1.stack().groupby(level=0).nlargest(1).unstack()
     A    B     C
x  NaN  0.0   NaN
y  NaN  NaN  10.0
z  9.0  NaN   NaN

【问题讨论】:

    标签: pandas indexing group-by duplicates


    【解决方案1】:

    您需要的是dropna=False 方法中的参数.stack()

    df = pd.DataFrame({'A':[np.nan,8,9], 'B':[0,np.nan,5], 'C':[2, 10, np.nan]}, index='x y z'.split())
    df.stack(dropna=False).groupby(level=0).nlargest(1).unstack()
    

    输出:

           A     C
    x x  NaN   2.0
    y y  NaN  10.0
    z z  9.0   NaN
    

    df1 = pd.DataFrame({'A':[np.nan,np.nan,9], 'B':[0,np.nan,np.nan], 'C':[np.nan, 10, np.nan]}, index='x y z'.split())
    df1.stack(dropna=False).groupby(level=0).nlargest(1).unstack()
    

    输出:

           A    B     C
    x x  NaN  0.0   NaN
    y y  NaN  NaN  10.0
    z z  9.0  NaN   NaN
    

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 1970-01-01
      • 2017-03-16
      • 2014-11-15
      • 2015-12-08
      • 2021-04-15
      • 1970-01-01
      • 2016-05-03
      相关资源
      最近更新 更多