如何在一个pandas DataFrame中合并观察,其中除了一列之外的所有列都相同?

时间:2017-12-21 16:16:44

标签: python pandas numpy jupyter-notebook

所以我有这个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中的IF值完全相同。

    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种颜色。 怎么解决?

1 个答案:

答案 0 :(得分:3)

我怀疑您正在处理' 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()

缺少' Black':

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