在 Pandas、Python 中查找具有相同第一列的所有行的最小值、最大值、平均值

Posted

技术标签:

【中文标题】在 Pandas、Python 中查找具有相同第一列的所有行的最小值、最大值、平均值【英文标题】:Finding min, max, avg in Pandas, Python for all rows with the same first column 【发布时间】:2020-04-06 17:43:46 【问题描述】:

是否可以找到具有相同第一列的所有数据的最小值、最大值和平均值?

例如,对于第一列1_204192587

    考虑从 4 到 n 的所有行和列

    查找第 4+ 列中所有条目的最小值、最大值和平均值,以及第一列中具有 **1_204192587** 值的所有行。

    意思是,为下面显示的每个唯一 Start 值做一种描述数据。

 `In: data.groupby(["Start"]).groups.keys()

 out: dict_keys(['1_204192587', '1_204197200'])`

This is how data frame looks like

我试过了

df=data.groupby(["Start"]).describe() 

但这不是我想要的。

我也尝试在描述时指定轴,

data.apply.(pd.DataFrame.describe, axis=1) 

但我得到了错误。

期望的输出

unique key/first column value   MIN   MAX   AVG
 1_204192587                    *     *      *
 1_204197200                    *     *      *

我是初学者,提前感谢您的任何回复。

【问题讨论】:

嗨。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题。 how to ask a good question 上的这些提示也可能有用。 Please don't post images of code/data (or links to them) 【参考方案1】:

您可以使用以下内容:

df.loc[4:].describe()

df 是您的数据框 [4:] 选择第 5 行,然后在 .describe() 上为您提供统计摘要(平均值、平均值...)

您还可以添加.transpose() 和结尾以获得您询问的输出。

如果你想将它分配给另一个变量(数据框)

所以它看起来像:

new_df = df.loc[4:].describe().trasnpose()

【讨论】:

【参考方案2】:

我认为您想比较每组的所有数字列,因此将 Start 列转换为 index,然后通过 DataFrame.select_dtypes 选择数字列,通过 DataFrame.stack 重塑并最后使用 DataFrameGroupBy.describe 按索引:

    data = pd.DataFrame(
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'D':[1,3,5,7,1,0],
         'E':[5,3,6,9,2,4],
         'Start':list('aaabbb')
)
df1 = data.set_index("Start").select_dtypes(np.number).stack().groupby(level=0).describe() 
print (df1)
       count      mean       std  min   25%  50%   75%  max
Start                                                      
a       12.0  5.000000  2.256304  1.0  3.75  5.0  6.25  9.0
b       12.0  3.833333  2.516611  0.0  2.00  4.0  5.00  9.0

或者通过GroupBy.agg指定聚合函数列表:

df2 = (data.set_index("Start")
           .select_dtypes(np.number)
           .stack()
           .groupby(level=0)
           .agg(['min','max','mean']))
print (df2)
       min  max      mean
Start                    
a        1    9  5.000000
b        0    9  3.833333

【讨论】:

以上是关于在 Pandas、Python 中查找具有相同第一列的所有行的最小值、最大值、平均值的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas - 查找具有最大聚合值的连续组

循环遍历Series以查找具有相同索引值的

pandas / python中的最佳数据库查找和更新

python pandas如何查找不同excel表格的数据并对比大小?

Python Pandas根据日期从1个表创建5个excel文件

Python Pandas - 具有不同列的 Concat 数据框忽略列名