【问题标题】:Pandas DataFrame Median FunctionPandas DataFrame 中值函数
【发布时间】:2018-12-16 23:36:30
【问题描述】:

如果我有一个 Pandas DataFrame 并且想要计算每列的中值,则参数 axis=1 似乎应该按列给出中值(根据文档)。但实际上,axis=0 给出了列的中位数。这是一个简单的可复制示例:

import pandas as pd

my_data = [[1.1, 2.2, 3.3], [1.2, 2.3, 3.4], [1.3, 2.4, 3.5]]
df = pd.DataFrame(my_data)
print(df.head())

print("\nTry to calculate median with axis=1\n")

print(df.median(axis=1))

它按行显示中位数。将其更改为 axis=0 按列显示中位数。这是否与为 DataFrame 设置索引的方式有关?

【问题讨论】:

  • 说熊猫axis 语义与它们不一致,您想到的究竟是什么“其他Python 函数”?此外,似乎本文档部分中提到的所有函数,包括 apply,在 axis 语义中都是一致的:pandas.pydata.org/pandas-docs/stable/…
  • 想到了 DataFrame 的 drop 函数:要从列中删除,请指定 axis=1。

标签: python pandas indexing axis median


【解决方案1】:

它做了它应该做的事情,axis = 1 意味着在每一行应用函数。您可以从另一个示例中看到

>>> print(df.sum(axis = 1))
0    6.6
1    6.9
2    7.2
dtype: float64

或者等价

>>> print(df.apply(sum, axis = 1))
0    6.6
1    6.9
2    7.2
dtype: float64

你可以在documentation看到

axis : {0 or ‘index’, 1 or ‘columns’}, default 0

Axis along which the function is applied:

0 or ‘index’: apply function to each column.
1 or ‘columns’: apply function to each row.

所以如果你想计算每一行列的平均值,你应该使用axis = 0

【讨论】:

  • 感谢您的澄清。不幸的是,“列”是您指定函数应应用于每一行的方式,但我知道它来自哪里。
【解决方案2】:

一些pandas函数axis=0和axis=1并不总是一致所以我推荐

df.median(axis='columns')
0    2.2
1    2.3
2    2.4
dtype: float64 

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2016-06-30
    • 2019-08-15
    • 2021-08-08
    相关资源
    最近更新 更多