Python 3.x 合并具有相同值的行和具有多个空值的相同索引
我是熊猫的新手。我正在尝试和答案所说的一样的事情 我有这样的数据Python 3.x 合并具有相同值的行和具有多个空值的相同索引,python-3.x,pandas,pandas-groupby,Python 3.x,Pandas,Pandas Groupby,我是熊猫的新手。我正在尝试和答案所说的一样的事情 我有这样的数据 SubjectID Visit Value1 Value2 Value3 1 1.57 1.75 1.56 1 1.56 N/A N/A B1 2 N/A 1.56 N/A 我想要像这样的数据
SubjectID Visit Value1 Value2 Value3
1 1.57 1.75 1.56
1 1.56 N/A N/A
B1 2 N/A 1.56 N/A
我想要像这样的数据
SubjectID Visit Value1 Value2 Value3
1 1.57,1.56 1.75 1.56
B1 2 N/A 1.56 N/A
我试过的是
#1. Did not work
df.groupby(['SubjectID', 'Visit'])['Value1']\
.apply(lambda val: ','.join(val)).reset_index()
#2. did not work
df = df.groupby(['SubjectID', 'Visit'])['Value1']\
.apply(lambda val: ','.join(val)).reset_index()
#3. did not work
df.groupby(['SubjectID', 'Visit'])['Value1', 'Value2', 'Value3']\
.apply(lambda v1, v2, v3 : ','.join(val1), ','.join(val2), ','.join(val3)).reset_index()
#4. did not work
df.groupby(['SubjectID', 'Visit'])\
['Value1'].apply(lambda v1:','.join(val1)) \
['Value2'].apply(lambda v2:','.join(val2)) \
['Value3'].apply(lambda v3:','.join(val3)).reset_index()
有什么建议可以让它正常工作吗?与自定义lambda函数一起使用,通过和转换为字符串删除缺少的值,如果所有值都缺少,则返回np.nan
:
f = lambda val: np.nan if val.isna().all() else ','.join(val.dropna().astype(str))
df = df.groupby(['SubjectID', 'Visit']).agg(f).reset_index()
print (df)
SubjectID Visit Value1 Value2 Value3
0 1 1.57,1.56 1.75 1.56
1 B1 2 NaN 1.56 NaN
如果需要空字符串而不是缺少值,则解决方案更简单:
f = lambda val: ','.join(val.dropna().astype(str))
df1 = df.groupby(['SubjectID', 'Visit']).agg(f).reset_index()
print (df1)
SubjectID Visit Value1 Value2 Value3
0 1 1.57,1.56 1.75 1.56
1 B1 2 1.56
使用groupby并连接来自同一组的值:
(
df.fillna('')
.astype(str).groupby(by=['SubjectID', 'Visit'])
.agg(lambda x: ','.join(x.loc[x!='']))
.reset_index()
)
SubjectID Visit Value1 Value2 Value3
0 1 1.57,1.56 1.75 1.56
1 B1 1 1.56
我还希望在Value2和Value3列上使用相同的值,是否要添加多个
agg
?请explain@KishorPawar-是,或者如果需要处理未在groupby
中指定的所有列,如['SubjectID','Visit']
仅删除groupby
之后的列,如果需要选择多个列,请使用df.groupby(['SubjectID','Visit'])['Value1','Value2','Value3']
上述操作无效,你能提出更多建议吗?@KishorPawar-你能说得更具体一点吗上面没有起作用
?它没有对df
进行任何更改,我没有合并。我不想只按SubjectID
进行分组。