Pandas 表示基于另一列的某些列(二进制值)

Posted

技术标签:

【中文标题】Pandas 表示基于另一列的某些列(二进制值)【英文标题】:Pandas mean for certain columns (binary values) based on another column 【发布时间】:2021-02-16 02:50:26 【问题描述】:

假设我们有这样的事情:

df = pd.DataFrame([[0,1,0,13], [1,0,1,14], [1,1,0,12], [1,0,0,15]], columns = ["A", "B" , "C", "p"])

A、B、C 具有二进制值,我想计算每列的 p 平均值,但要分别计算每个组(1 和 0)。

对于我使用的一列

df.groupby('A')['p'].mean()

但是如何一次计算列 ABC 的平均值?

【问题讨论】:

预期输出应该如何? 完美的是:两列 0 和 1 以及 3 行 A、B、C 答案已编辑。 @jezrael 完美!谢谢! 【参考方案1】:

首先使用DataFrame.melt 进行反透视,聚合mean 最后添加Series.unstack

df1 = df.melt('p').groupby(['variable', 'value'])['p'].mean().unstack(fill_value=0)

或使用DataFrame.pivot_table:

df1 = df.melt('p').pivot_table(index='variable', columns='value', values='p', fill_value=0)

print (df1)
value             0          1
variable                      
A         13.000000  13.666667
B         14.500000  12.500000
C         13.333333  14.000000

【讨论】:

以上是关于Pandas 表示基于另一列的某些列(二进制值)的主要内容,如果未能解决你的问题,请参考以下文章

Pandas - 基于 str 包含从另一列创建新列/值

Pandas:一旦列达到另一列的某个值,我如何返回行值?

R:基于一个列的值存在于另一列中,生成虚拟变量

Pandas:根据另一列的键在现有列上映射字典值以替换 NaN

pandas取列值转化为列表

要检查 Pandas Dataframe 列的 TRUE/FALSE,如果 TRUE 检查另一列是不是满足条件并生成具有值 PASS/FAIL 的新列