尝试从优化的 groupby 方法中获取所需的数据帧

Trying to get the desired DataFrames from optimized groupby methods

我正在尝试通过调用 df.groupby('index_column').max()df.groupby('index_column').min() 从这个更大的 DataFrame 中创建更小的 DataFrame,其中 index_column 是我想要的 df 的列现在它成为新的 Min 和 Max DataFrames 的索引。在这些 Min 和 Max DataFrame 中,我只想有 2 个简单的列,一个索引列,另一个列分别只包含 Max 和 Min 值。

结合上下文,我将使用我所做的示例:

主 DataFrame,df,在标准输出中看起来像这样:

In [3]: df
Out[3]: 
         name                                          parameter  cycles  \
0       dfmul  [["scheduler_type", "sdc"], ["max_chain_delay"...     159   
1       dfdiv  [["scheduler_type", "sdc"], ["max_chain_delay"...    1335   
2       mpeg2  [["scheduler_type", "sdc"], ["max_chain_delay"...    1992   
3         aes  [["scheduler_type", "sdc"], ["max_chain_delay"...   5441   
4        mips  [["scheduler_type", "sdc"], ["max_chain_delay"...    4263   
5       dfadd  [["scheduler_type", "sdc"], ["max_chain_delay"...     455   
6       dfsin  [["scheduler_type", "sdc"], ["max_chain_delay"...   39589      
..        ...                                                ...     ...    
403     adpcm  [["scheduler_type", "sdc"], ["max_chain_delay"...   23355   
404     dfadd  [["scheduler_type", "sdc"], ["max_chain_delay"...     599   
405       sha  [["scheduler_type", "sdc"], ["max_chain_delay"...  348417   
406  blowfish  [["scheduler_type", "sdc"], ["max_chain_delay"...  251877   
407      jpeg  [["scheduler_type", "sdc"], ["max_chain_delay"...  766742   

    mem_cycles  build_number  
0         None          1300  
1         None          1300  
2         None          1300  
3         None          1300  
4         None          1300  
..         ...           ...  
401       None          1344  
402       None          1344  
403       None          1344  
404       None          1344  
405       None          1344  
406       None          1344  
407       None          1344  

[408 rows x 5 columns]

In [4]: 

当我在 groupby('build_number') 之后调用 max()min() 方法时,我得到以下数据帧,其中包含与 df 中相同的列,如您所见:

In [5]: df.groupby('build_number').max()
Out[5]: 
             name                                          parameter  cycles  \
build_number                                                                   
1300          sha  [["scheduler_type", "sdc"], ["max_chain_delay"...  348417   
1301          sha  [["scheduler_type", "sdc"], ["max_chain_delay"...  348417   
1302          sha  [["scheduler_type", "sdc"], ["max_chain_delay"...  348417   

# And it continues so on, won't list the whole frame

              mem_cycles  
build_number              
1300                 NaN  
1301                 NaN  
1302                 NaN  
# And it continues so on, won't list the whole frame

In [6]: 

我做的时候也是一样min()

但是,我想要的只是一个 DataFrame,它只有 build_number 作为索引列,而 cycles 只有非索引列。事实上,如果我改为调用 mean() groupby 方法,就会得到这种所需的输出格式。

In [6]: df.groupby('build_number').mean()
Out[6]: 
                     cycles
build_number               
1300           42966.500000
1301           42992.000000
1302           42989.900000
1303           42985.300000

# And it continues so on, won't list the whole frame

In [7]: 

所以我的问题是:

  1. 当我调用 min() 和 [=18 时,如何让我的输出成为我想要的输出(这是调用 mean() 时的格式) =]?

  2. 为什么当我调用mean()时,生成的DataFrame已经消除了所有其他非数字列,但min()max()没有消除那些其他非数字列?

非常感谢您的帮助!

基本上您需要做的是 过滤 具有您想要的 的结果,如下所示:

编辑: 正如@cwharland 所指出的,在应用 max() / min()[=19 之前过滤循环更有效=]

df.groupby('build_number')['cycles'].max()

并且

df.groupby('build_number')['cycles'].min()

之所以使用mean()只会显示cycles列是因为mean没有定义要获得 String 的平均值,如 parameters,平均值是 cycles 的那些记录的平均值,而 max()min() 只会 return 一条记录(最大值/最小值),因此显示该记录中的所有列,是否有意义?

更新: 为了使这一点更清楚,每个字段中的 Numeric 值可以执行它们自己的 mean/max/min 操作和return 相应的值,String,但是只有 max/min,按字典顺序排序,如 'A' < 'C''Z' > 'B' 等,但它不能执行 mean() 操作,因为它不是数字。 所有单独的列将 return 它自己的 max/min/mean 在 groupby 之后仅当它们适用时。

旁注:过滤后的 max()min() 结果SeriesDataFrame.

更有可能

因此,要从结果中获得一个新的 DataFrame,您只需要做:

df_max = pd.DataFrame(df.groupby('build_number')['cycles'].max())
df_min = pd.DataFrame(df.groupby('build_number')['cycles'].min())

希望对您有所帮助。