【问题标题】:Find the minimum value in each column with their index找到每列中的最小值及其索引
【发布时间】:2018-01-29 11:49:43
【问题描述】:

我想知道是否有任何方法可以在不使用聚合方法 (df.agg(['min','idmin']).T) 的情况下使用其索引 id 获取每列中的最小值这段代码?!!

dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

【问题讨论】:

  • 您的预期输出是什么?请举个例子。
  • 我已经提供了获取输出的所有代码!
  • (df.agg(['min','idmin']).T) 不起作用?
  • 你使用的是什么版本的 Pandas?!
  • 0.20?我得到一个 ValueError。

标签: pandas aggregation minimum


【解决方案1】:
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

def minVal(x):
    return pd.Series(index=['min','idx'],data=[x.min(),x.idxmin()])

x = df.apply(minVal)

print(x)

          A                 B                      C                   D
min -0.743023394642       -1.05144770539       -2.1311363065        -1.02142276427
idx 2013-01-05 00:00:00   2013-01-04 00:00:00  2013-01-03 00:00:00  2013-01-06 00:00:00

您还可以对 x 进行转置以获取数据的要点。

print(x.T)

      min            idx
A  -0.657701  2013-01-05 00:00:00
B   -1.37038  2013-01-03 00:00:00
C   -1.93103  2013-01-03 00:00:00
D   -1.49314  2013-01-05 00:00:00

【讨论】:

    【解决方案2】:

    从头开始构造一个DataFrame:

    pd.DataFrame({'min': df.min(), 'idxmin': df.idxmin()})
    
           min     idxmin
    A -1.106929 2013-01-03
    B -0.642583 2013-01-06
    C -1.350638 2013-01-04
    D -0.213750 2013-01-06
    

    或连接两个系列:

    pd.concat((df.min(), df.idxmin()), axis=1).rename(columns={0: 'min', 1: 'idxmin'})
    Out: 
            min     idxmin
    A -1.106929 2013-01-03
    B -0.642583 2013-01-06
    C -1.350638 2013-01-04
    D -0.213750 2013-01-06
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 2015-10-24
      • 2021-07-17
      • 2023-03-03
      • 2016-02-24
      • 2011-09-05
      相关资源
      最近更新 更多