尝试从优化的 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]:
所以我的问题是:
当我调用 min()
和 [=18 时,如何让我的输出成为我想要的输出(这是调用 mean()
时的格式) =]?
为什么当我调用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() 结果Series 比 DataFrame.
更有可能
因此,要从结果中获得一个新的 DataFrame,您只需要做:
df_max = pd.DataFrame(df.groupby('build_number')['cycles'].max())
df_min = pd.DataFrame(df.groupby('build_number')['cycles'].min())
希望对您有所帮助。
我正在尝试通过调用 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]:
所以我的问题是:
当我调用
min()
和 [=18 时,如何让我的输出成为我想要的输出(这是调用mean()
时的格式) =]?为什么当我调用
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() 结果Series 比 DataFrame.
更有可能因此,要从结果中获得一个新的 DataFrame,您只需要做:
df_max = pd.DataFrame(df.groupby('build_number')['cycles'].max())
df_min = pd.DataFrame(df.groupby('build_number')['cycles'].min())
希望对您有所帮助。