【问题标题】:Find the largest number in column查找列中的最大数字
【发布时间】:2019-03-13 05:20:05
【问题描述】:

我正在尝试查找具有最大数字的月份(“月份”列)(在 DepDelay 列中)

数据

flightID         Month  ArrTime ActualElapsedTime  DepDelay   ArrDelay
BBYYEUVY67527        1   1514.0               58.0       NA      64.0   
MUPXAQFN40227        1     37.0              120.0       13      52.0   
LQLYUIMN79169        1    916.0              166.0       NA     -25.0   
KTAMHIFO10843        1      NaN                NaN        5       NaN   
BOOXJTEY23623        1      NaN                NaN        4       NaN  
BBYYEUVY67527        2   1514.0               58.0       NA      64.0   
MUPXAQFN40227        2     37.0              120.0       NA      52.0   
LQLYUIMN79169        2    916.0              166.0       NA     -25.0   
KTAMHIFO10843        2      NaN                NaN       15       NaN   
BOOXJTEY23623        2      NaN                NaN        4       NaN  

我试过了:

data = pd.read_csv('data.csv', sep='\t')

dep_delay = all_data.groupby(["Month"].DepDelay.count().max())

print(dep_delay)

错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-14-2ea6213009d6> in <module>()
----> 1 dep_delay = all_data.groupby(["Month"].DepDelay.count().max())
      2 
      3 print(dep_delay)

AttributeError: 'list' object has no attribute 'DepDelay'

良好的输出:

Month      DepDelay
    1            22

【问题讨论】:

  • 我认为您在这里需要sum 而不是countcount 计算非空值的数量,sum 总计(忽略 NaN)。

标签: python python-3.x pandas dataframe pandas-groupby


【解决方案1】:

为了让你的代码工作,改变

dep_delay = all_data.groupby(["Month"].DepDelay.count().max())

dep_delay = all_data.groupby(["Month"]).DepDelay.count().max()

要找到您的解决方案:

idx = all_data['DepDelay'].idxmax()

all_data.loc[[idx], ['Month', 'DepDelay']]

输出

     Month  DepDelay
8      2      15.0

【讨论】:

    【解决方案2】:

    您需要sum 而不是count 才能按组对值求和。这是一种使用GroupBy + sum,然后是idxmax的方法:

    res = df.groupby('Month')['DepDelay'].sum().reset_index()
    res = res.loc[[res['DepDelay'].idxmax()]]
    
    print(res)
    
       Month  DepDelay
    0      1      22.0
    

    或者,您可以分组和排序,然后提取第一行:

    res = df.groupby('Month')['DepDelay'].sum()\
            .sort_values(ascending=False).head(1)\
            .reset_index()
    
    print(res)
    
       Month  DepDelay
    0      1      22.0
    

    【讨论】:

      【解决方案3】:

      另一种方法:

      pd.DataFrame(df.loc[df['DepDelay'].idxmax(), ['Month', 'DepDelay']]).T
      #  Month DepDelay
      #8     2       15
      

      您可以重置索引以将8更改为0

      pd.DataFrame(df.loc[df['DepDelay'].idxmax(), ['Month', 'DepDelay']]).T.reset_index(drop=True)
      #  Month DepDelay
      #0     2       15
      

      【讨论】:

      • 答案应该是 22 否?
      • @Yuca 我正在尝试查找具有最大数字(在 DepDelay 列中)的月份(列“月”) 是 OP 所说的。而 22 的事情在另一个答案中得到了解决。
      • 和我的 15 :),好的,所以有足够的歧义来允许两种方法
      • @Yuca 你的是Series,我的是DataFrame :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多