我有两个系列,我想验证它们是否都有值,所以我可以在值之间加上逗号。这样,最终结果看起来会更有条理。现在,当我将两个系列合并到Dataframe的一列时,它看起来很乱。
这就是我的表现:
series1 = df_grouped['mismatchMom'].apply(lambda g: g.any() + ' with mother' if g.any() else None)
series2 = df_grouped['mismatchDad'].apply(lambda g: g.any() + ' with father' if g.any() else None)
df_individual['mismatch'] = series1 + ', ' + series2
它可以工作,但只要在series1中没有值,或者在series2中没有值或者没有值,这两个逗号看起来都很奇怪。
我试着这样做:
df_individual['mismatch'] = series1 + ', ' + series2 \
if series1.bool() & series2.bool() else \
series1 + series2
(我也尝试将bool()
替换为isnull()
但我收到了错误
ValueError:系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。
谢谢!
答案 0 :(得分:1)
如果您愿意,可以使用此方法:(如果您的s1和s2具有相同的大小)
df['mismatch'] = pd.concat([s1,s2],axis = 1).apply(lambda x: ', '.join(x) if not x.all() == '' else x.sum(),axis=1)
我只是要求更改None
,因为if语句会像这样简单。
我们的想法是concat按列添加两个系列,如果没有empty strings
,则只需加入行。如果有,我们只是对行元素求和。
这样你就可以获得如下输出:
A B mismatch
0 stuff more aa, aa
1 stuff more bb
2 stuff more cc
3 stuff more
4 stuff more ee, ee
没有奇怪的,
。
希望这有用。