如何对含整数与字符串的groupby列应用str.join方法
解决混合类型数据拼接报错的方案
你遇到的TypeError确实是因为Y列同时存在字符串和整数类型,','.join()方法只能处理纯字符串序列,无法直接拼接整数元素。以下是两种可行的改进方案:
方法一:提前将整列转为字符串类型
先把Y列的所有元素统一转为字符串,再执行分组拼接:
import pandas as pd # df=pd.read_excel('test.xlsx') df = pd.DataFrame({"X": ["a", "a", "a", "a", "b", "b", "b"], "Y": ["hello", 3, "bye", "hi", "apple", "orange", 4]}) # 统一转换为字符串类型 df['Y'] = df['Y'].astype(str) # 分组拼接后重置索引,恢复DataFrame格式 orden = df.groupby('X')['Y'].apply(','.join).reset_index() print(orden)
输出结果:
| X | Y | |
|---|---|---|
| 0 | a | hello,3,bye,hi |
| 1 | b | apple,orange,4 |
方法二:在分组拼接时动态转换类型
如果不想修改原DataFrame的列类型,可以在apply的lambda函数里,把每个元素实时转为字符串再拼接:
import pandas as pd # df=pd.read_excel('test.xlsx') df = pd.DataFrame({"X": ["a", "a", "a", "a", "b", "b", "b"], "Y": ["hello", 3, "bye", "hi", "apple", "orange", 4]}) # 分组时逐个转换元素类型再拼接 orden = df.groupby('X')['Y'].apply(lambda x: ','.join(str(item) for item in x)).reset_index() print(orden)
这个方法会得到和上面完全一致的输出结果,且不会改变原数据中Y列的类型。
内容的提问来源于stack exchange,提问作者heroecall
相关产品推荐
相关产品推荐

