如何在一个除一列之外的所有列都相同的 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 应用于除一列之外的所有列? [复制]