python - 将分组后的列的多个值合并到python pandas中的一列中

标签 python pandas dataframe row pandas-groupby

我正在寻找与此线程类似的任务:Merge multiple column values into one column in python pandas

但不同的是,我想创建一个新列,在按另一列分组后合并列中的所有非空值。这是一个玩具示例:

df= pd.DataFrame({'ID1' : [1,1,2,2,3,3,3],'ID2' : ['a','a','b','b','c','c','c'],
             'Status' : pd.Series([np.nan,'1', np.nan,'1','2',np.nan,'1'], 
                                  dtype="category")})

 df
Out[74]: 
     ID1 ID2 Status
 0    1   a    NaN
 1    1   a      1
 2    2   b    NaN
 3    2   b      1
 4    3   c      2
 5    3   c    NaN
 6    3   c      1

然后我想groupby ID1ID2 :
gr = df.groupby(['ID1','ID2'])

然后,我希望我的结果是这样的:
Out:
   NewCol
0   1
1   1
2   2,1

所以它是一个新的DataFrame包含 non-null Status 的值按 ID1 分组的列和 ID2 .

提前致谢。

最佳答案

使用 GroupBy.agg 使用 lambda 函数是最通用的解决方案:

df1 = df.groupby(['ID1','ID2'])['Status'].agg(lambda x: ','.join(x.dropna())).reset_index()
print (df1)
   ID1 ID2 Status
0    1   a      1
1    2   b      1
2    3   c    2,1

另一个想法是在第一步中删除重复项,但是如果某些组只有缺失值,则从输出中删除它,因此需要进行下一步处理,例如 merge :
#first group with only NaNs
df= pd.DataFrame({'ID1' : [1,1,2,2,3,3,3],'ID2' : ['a','a','b','b','c','c','c'],
             'Status' : pd.Series([np.nan,np.nan, np.nan,'1','2',np.nan,'1'], 
                                  dtype="category")})


#first group is dropped
df11 = (df.dropna(subset=['Status'])
          .groupby(['ID1','ID2'])['Status']
          .agg(','.join)
          .reset_index())
print (df11)
   ID1 ID2 Status
0    2   b      1
1    3   c    2,1

#added missing pairs and `NaN`s converted to empty strings:
df2 = df.drop_duplicates(['ID1','ID2'])[['ID1','ID2']].merge(df11, how='left').fillna('')
print (df2)
   ID1 ID2 Status
0    1   a       
1    2   b      1
2    3   c    2,1

第一个解决方案:
df1 = df.groupby(['ID1','ID2'])['Status'].agg(lambda x: ','.join(x.dropna())).reset_index()
print (df1)
   ID1 ID2 Status
0    1   a       
1    2   b      1
2    3   c    2,1

关于python - 将分组后的列的多个值合并到python pandas中的一列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60787578/

相关文章:

python - 如何解决托管在 heroku 上的 django 项目的迁移问题?

python - 如何在 Python 中读取 PGM P2 图像

python - 仅针对特定列中的某些条件值,使用之前的值填充每组每小时缺失的日期

python - 动态更改回顾期

R Merge - 左连接但显示所有变量

python - 切片操作是否总是分配一个新对象?

python - 如何在 Tastypie 中加载外键元素

python - 如何将数据框中的某些行替换为其他数据框中具有附加列的相应行

python - 如何从 pandas 数据框中动态选择子集?

python - 运行一个循环以在 Python 中生成变量名