熊猫if-else“ join”函数返回ValueError:系列的真值不明确

时间:2019-12-11 10:30:48

标签: python pandas if-statement pandas-groupby

下面是我的数据集的示例:

╔═══╦════════════╦═══════════════╗
║   ║ col_1      ║ col_2         ║
╠═══╬════════════╬═══════════════╣
║ 1 ║ 106        ║ I am Alex.    ║
║ 2 ║ 106        ║ I'm a student ║
║ 3 ║ 106        ║ I like apple  ║    
║ 4 ║ 1786       ║ Dog is a pet  ║
║ 5 ║ 1786       ║ Jack is my pet║
╚═══╩════════════╩═══════════════╝

我想首先对“ col_1”进行分组,然后将if-else条件下的字符串连接到“ col_2”中,条件是查找字符串中的最后一个字符是否以“。”结尾。

如果以句号结尾,则使用“” .join(使用空格将它们连接在一起)连接同一组的下一个字符串。 否则,请加入他们的句号。

最终结果将如下所示:

╔═══╦════════════╦══════════════════════════════════════════╗
║   ║ col_1      ║ col_2                                    ║
╠═══╬════════════╬══════════════════════════════════════════╣
║ 1 ║ 106        ║ I am Alex. I'm a student. I like apple   ║
║ 2 ║ 1786       ║ Dog is a pet. Jack is my pet             ║
╚═══╩════════════╩══════════════════════════════════════════╝

我的代码如下:

new_df = df.groupby(['col_1'])['col_2'].apply(lambda x: ' '.join(x) if x[-1:] == '.' else '. '.join(x)).reset_index()

但是我却收到此错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

假设您的所有字符串都没有尾随空格,为什么不只应用'. '.join(...)并删除加倍的结果呢?

df = pd.DataFrame({
    'col1': [106,106,106,1786,1786],
    'col2': ['I am Alex.','I\'m a student','I like apple','Dog is a pet','Jack is my pet']
})

result = df.groupby('col1', as_index=False).agg({'col2': lambda x: '. '.join(x)})
result['col2'] = result['col2'].str.replace('.. ', '. ', regex=False)

这使您如预期的那样

   col1                                    col2
0   106  I am Alex. I'm a student. I like apple
1  1786            Dog is a pet. Jack is my pet

答案 1 :(得分:0)

df.groupby('col_1')['col_2'].apply(lambda x: x.str.cat()).reset_index()