将两个Series组合到Dataframe的一列中

时间:2017-07-12 14:24:28

标签: python pandas

我有两个系列,我想验证它们是否都有值,所以我可以在值之间加上逗号。这样,最终结果看起来会更有条理。现在,当我将两个系列合并到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()。

谢谢!

1 个答案:

答案 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

没有奇怪的,

希望这有用。