如何在一个除一列之外的所有列都相同的 Pandas DataFrame 中合并观察结果?

Posted

技术标签:

【中文标题】如何在一个除一列之外的所有列都相同的 Pandas DataFrame 中合并观察结果?【英文标题】:How to merge observations in one pandas DataFrame where all but one columns are the same? 【发布时间】:2018-06-04 08:37:00 【问题描述】:

所以我有这个 pandas DataFrame,有 5 列和 100000 行。示例如下:

    V1      V2          V3          V4  V5
0   2014    Alfa Romeo  159         1   157
1   2014    Alfa Romeo  GIULIETTA   1   119
2   2014    Alfa Romeo  GIULIETTA   3   119

我要做的是对 V4 列中的值求和,如果 V1、V2、V3 和 V5 中的值完全相同。

    V1      V2          V3          V4  V5
0   2014    Alfa Romeo  159         1   157
1   2014    Alfa Romeo  GIULIETTA   4   119

一开始我以为 groupby 可以完成这项工作,但当我这样做时

df.groupby(['V1', V2','V3', 'V5' ]).sum()

我丢失了 V3 列中的一些信息,例如,我应该有 10 种不同类型的颜色,但现在我只有 3 种。 如何解决?

【问题讨论】:

lost some of the information in column V3你能详细说明一下吗? df.groupby(['V1', 'V2', 'V3', 'V5']).V4.sum().reset_index().reindex(columns=df.columns) 适合你吗? 丢失了V3栏的部分信息 你能详细说明一下吗? – cᴏʟᴅsᴘᴇᴇᴅ 当然。在我的数据库中,我有沃尔沃的 10 种类型(V3 列): XC60 V60 V40 XC70 S60 S80 V70 V40 CROSS COUNTRY 13 XC90 10 V60 HYBRID 1 在我制作 df.groupby(['V1', 'V2', ' V3','V5' ]).agg([ "sum"]) 显示只有V70, XC60, XC70, XC90。这是熊猫的错误​​吗?你怎么看? df.groupby(['V1', 'V2', 'V3','V5' ],as_index=False).agg([ "sum"]) 【参考方案1】:

我怀疑您正在处理“V1”、“V2”、“V3”或“V5”列中的缺失数据,并且这些数据从 groupby 中省略。看到这个SO Post

一种解决方法是使用 fillna():

df.fillna("Missing").groupby(['V1','V2','V3','V5']).V4.sum()

例子:

打印(df)

       V1          V2         V3  V4   V5
0  2014.0  Alfa Romeo        159   1  157
1  2014.0  Alfa Romeo  GIULIETTA   1  119
2  2014.0  Alfa Romeo  GIULIETTA   3  119
3     NaN  Alfa Romeo      Black   4  119

df.groupby(['V1','V2','V3','V5']).V4.sum()

缺少“黑色”:

V1      V2          V3         V5 
2014.0  Alfa Romeo  159        157    1
                    GIULIETTA  119    4
Name: V4, dtype: int64

使用 fillna():

df.fillna("Missing").groupby(['V1','V2','V3','V5']).V4.sum()

V1       V2          V3         V5 
2014.0   Alfa Romeo  159        157    1
                     GIULIETTA  119    4
Missing  Alfa Romeo  Black      119    4
Name: V4, dtype: int64

【讨论】:

以上是关于如何在一个除一列之外的所有列都相同的 Pandas DataFrame 中合并观察结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MySQL 查询从表中选择除一列之外的所有内容? [复制]

如果除一列之外的所有值都相等,则显示一行

如何将 summarise_each 应用于除一列之外的所有列? [复制]

如何从python中的数组(或矩阵)中提取除一列之外的所有列?

返回除一列中具有重复 ID 的行之外的所有列

选择除一列之外的所有列[重复]