首页 > 解决方案 > 使用 Pandas 在数据框中组合两行的不同部分

问题描述

我有一个大的(> 10000 行)数据框,如下所示,我必须通过col_1、col_2、col_3组 acol_4、col_5b组 c组合具有相同名称的行(b & c不会同时存在)。

我可以在网上找到如何组合(加起来)行的每一列,而不是放在不同的部分。

原始数据框

姓名 团体 col_1 col_2 col_3 col_4 col_5
一种 1 2 3
b 1 2 3
一种 0 1 2 1
C 0 3
一种 2 3

期望的结果

姓名 col_1 col_2 col_3 col_4 col_5
1 2 2 3
0 1 2 3
2 3

标签: pythonpandasdataframe

解决方案


有点特别的方法,但是您可以这样做的一种方法是按名称和组对数据框进行排序,然后将您的数据框df分成两部分(即 col1/2/3 用于组 a),执行 agroupbyfirst()使用第一个dflast()第二个,然后使用concat

import pandas as pd

df.sort_values(['name','group'],ascending=True,inplace=True)

one = df.iloc[:,:5]
two = pd.concat([df.iloc[:,:2],df[['col_4','col_5']]],axis=1)

def my_func(df1,df2,col):
    return pd.concat([df1.groupby(col).first(),
                      df2.groupby(col).last()],
                      axis=1).drop('group',axis=1)
 
res = my_func(one,two,'name')

哪个打印:

print(res)
      col_1  col_2  col_3  col_4  col_5
name                                   
ann       1    NaN   2.00   2.00   3.00
ben       0   1.00   2.00   3.00    NaN
cat       2   3.00    NaN    NaN    NaN

如果我没记错的话,这可以满足您的需求。


推荐阅读