下面是我的数据集的示例:
╔═══╦════════════╦═══════════════╗
║ ║ 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().
非常感谢您的帮助!
答案 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()