python - Pandas 在groupby中表示跨行和列

标签 python python-2.7 pandas

我有一个 dataframe,我想对行和列进行平均并按 Person 分组。

通常我可以做 .mean().mean(axis=1),但是,我的数据有几个 NaN 值,所以此方法对具有 NaN

的行应用不适当的权重
My code:
import pandas as pd
import numpy as np
df = pd.DataFrame(data=[[1,2,np.nan, 'Person A'],
                        [1,2,3, 'Person B'],
                        [2,np.nan,5,'Person B'],
                        [4,5,7, 'Person A']],
                  columns=['A', 'B','C', 'Person'])

df = df.groupby('Person').mean()

print df.mean(axis=1)

输出:

Person
Person A    4.333333
Person B    2.500000

期望的输出:

Person
Person A    3.8
Person B    2.6

最佳答案

df.set_index('Person').stack().groupby(level=0).mean().to_frame()

输出:

Person
Person A    3.8
Person B    2.6
dtype: float64

df.melt(id_vars='Person').groupby('Person')['value'].mean().to_frame()

输出:

Person
Person A    3.8
Person B    2.6
Name: value, dtype: float64

关于python - Pandas 在groupby中表示跨行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44502713/

相关文章:

python - 如果特定列范围内有任何缺失值,如何更新数据框中的列值?

Python 计算数据透视表中的所有 bool 值

pandas - 对 python pandas 数据框中的多个变量进行逆透视

python - 将一系列 float 转换为 int - 列表中的某些 NaN 导致错误 'cannot convert float NaN to integer' 。如何跳过 NaN?

python - 显示每个条形图的均值虚线

python - 在 pandas 中访问存储在 s3 上的 HDF 文件

python - 如何按名称获取列的索引?

python - 使用python将IP范围划分为1024 block

python - pySerial:端口仅适用于第一个命令

python - 鳄梨数据框的 For 循环