【问题标题】:Pandas - Averaging entries in specific row and columnPandas - 平均特定行和列中的条目
【发布时间】:2021-10-05 13:30:35
【问题描述】:

我已经导入了一个包含一系列表格的 Excel 工作表。 pandas 数据框如下所示:

   1   2   3   4    
0  3   2   7   2   
1  4   2   8   1
2  5   1   4   1
3  6   0   2   3
NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN
   1   2   3   4  
0  3   2   2   1
1  3   3   9   1
2  3   1   5   1
3  2   9   4   1

......

我想平均每个单元格中的所有值(即每个表的第 0 行第 1 列中的平均值),从而生成 1 个包含所有平均值的表。

我不确定如何更改 df.groupby(['1']).mean() 函数以便也按行隔离单元格。我可以使用循环来遍历列,但是这样做并同时遍历行可能会很棘手。如有任何建议,我将不胜感激。

期望的输出:

   1   2   3    4    
0  3   2   4.5  1.5   
1  3.5 2.5 8.5  1
2  4   1   4.5  1
3  4   4.5 3    2

【问题讨论】:

  • 您能否添加一个所需输出的示例?
  • @DeanTaler - 当然我添加了一个 - 它基本上是一个平均值表。
  • 您需要df.groupby(level=0).mean() 吗? print (df.info()) 是什么?
  • 每个DataFrame的列名都一样吗?
  • @jezrael - 是的,每个表都有相同的列名,并由一些导入为 NaN 的字符串分隔

标签: python pandas


【解决方案1】:

如果第一列是索引并且每个 subDataFrame 中的相同列名称最简单的是:

print (df)
       1    2    3    4
0.0  3.0  2.0  7.0  2.0
1.0  4.0  2.0  8.0  1.0
2.0  5.0  1.0  4.0  1.0
3.0  6.0  0.0  2.0  3.0
NaN  NaN  NaN  NaN  NaN
NaN  NaN  NaN  NaN  NaN
NaN  1.0  2.0  3.0  4.0
0.0  3.0  2.0  2.0  1.0
1.0  3.0  3.0  9.0  1.0
2.0  3.0  1.0  5.0  1.0
3.0  2.0  9.0  4.0  1.0


df = df.groupby(level=0).mean()
print (df)
       1    2    3    4
0.0  3.0  2.0  4.5  1.5
1.0  3.5  2.5  8.5  1.0
2.0  4.0  1.0  4.5  1.0
3.0  4.0  4.5  3.0  2.0

如果不是,则需要进行一些预处理,具体取决于数据。

例如如果最后一列有 NaNs 则删除行以避免将 row=1 与 index=1 混合:

print (df)
       1    2    3    4
0.0  3.0  2.0  7.0  2.0
1.0  4.0  2.0  8.0  1.0
2.0  5.0  1.0  4.0  1.0
3.0  6.0  0.0  2.0  3.0
NaN  NaN  NaN  NaN  NaN
NaN  NaN  NaN  NaN  NaN
1.0  2.0  3.0  4.0  NaN <- columns names like index=1 here are removed
0.0  3.0  2.0  2.0  1.0
1.0  3.0  3.0  9.0  1.0
2.0  3.0  1.0  5.0  1.0
3.0  2.0  9.0  4.0  1.0


df = df.dropna(subset=df.columns[-1:]).groupby(level=0).mean()
print (df)
       1    2    3    4
0.0  3.0  2.0  4.5  1.5
1.0  3.5  2.5  8.5  1.0
2.0  4.0  1.0  4.5  1.0
3.0  4.0  4.5  3.0  2.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2023-02-08
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多