熊猫如何根据条件在groupby中划分行列

Posted

技术标签:

【中文标题】熊猫如何根据条件在groupby中划分行列【英文标题】:Pandas how to divide columns of rows within groupby based on condition 【发布时间】:2021-09-12 10:42:02 【问题描述】:

我有数据框

C1    c10 val val_type
1      3   5   target
1      3   8   end
1      3   9   other
2      8   1   end
2      8   2   target
2      8   9   other

C1、C10 的值创建 3 个组。 在这些组中,我想创建一个新列,即目标/结束。 所以输出将是:

C1    c10 val val_type   new 
1      3   5   target    0.652
1      3   8   end       0.652
1      3   9   other     0.652
2      8   12  end       0.166
2      8   2   target    0.166
2      8   9   other     0.166

最好的方法是什么?

编辑:忽略其他

【问题讨论】:

其他人会怎样?你会忽略它吗? 您想要target/end 用于C1C1C10 中的每个组吗?如果是后者,那么您有六个组? 三组?组 (1,3)、组 (1,5) 和组 (2,8)? 固定类型,只有2组(C1和C10总是相等的) 【参考方案1】:

你可以pivot它:

s = df.pivot("C1", "val_type", "val")
df["new"] = df["C1"].map(s["target"]/s["end"])
print (df)

   C1  c10  val val_type       new
0   1    3    5   target  0.625000
1   1    3    8      end  0.625000
2   1    5    9    other  0.625000
3   2    8   12      end  0.166667
4   2    8    2   target  0.166667
5   2    8    9    other  0.166667

【讨论】:

我得到 'ValueErrorIndex contains duplicate entries, cannot reshape' 对于 pivot 命令,有什么方法可以检查重复项的确切位置? (我的 df 实际上是 10K+ 行,应该重复所以不知道如何找到 id)【参考方案2】:

我们可以pivot 重塑数据框然后使用eval 计算target / end,然后merge 给定dfC1, c10 上的评估列

c = ['C1', 'c10']
df.merge(df.pivot(c, 'val_type', 'val').eval('target/end').rename('new'), on=c)

   C1  c10  val val_type       new
0   1    3    5   target  0.625000
1   1    3    8      end  0.625000
2   1    3    9    other  0.625000
3   2    8   12      end  0.166667
4   2    8    2   target  0.166667
5   2    8    9    other  0.166667

【讨论】:

@Shubam Sharma 我得到 'ValueErrorIndex 包含重复的条目,无法为数据透视命令重塑',有什么方法可以检查重复项的确切位置? (我的 df 实际上是 10K+ 行,应该重复所以不知道如何找到 id) @okuoub 检查df[['C1' , 'c10', 'val_type']].duplicated().any() @okuoub 如果您不关心重复项或想要删除重复项,那么我们可以使用pivot_tableaggfunc='first'df.merge(df.pivot_table('val', c, 'val_type', aggfunc='first').eval('target/end').rename('new'), on=c)

以上是关于熊猫如何根据条件在groupby中划分行列的主要内容,如果未能解决你的问题,请参考以下文章

熊猫:来自 groupby.value_counts() 的字典

excel如何根据条件自动变换行列颜色?

在熊猫中按多个条件分组[重复]

熊猫:Groupby,循环并添加一小时迭代与组内的条件

spoon中的分组groupby在哪里

将熊猫 groupby 中的组绘制在一个图中时如何更改 x 轴