python - 如何根据另一列从数据框中的列中连接唯一字符串
问题描述
我需要根据另一列中的值连接一列中的唯一字符串。
我尝试了 groupby,但要么我遗漏了一些明显的东西,要么就是矫枉过正。
下面是输入数据框。我想col2
为每个值加入唯一的字符串col1
df = pd.DataFrame([
['a', '', 1],
['a', 's2', 2],
['a', 's2', 3],
['a', 's3', 3],
['b', '', 4],
['b', 's1', 5],
['c', '', 6]],
columns=['col1', 'col2', 'col0'])
我正在寻找这样的输出:
df2 = pd.DataFrame([
['a', '', 1, 's2;s3'],
['a', 's2', 2, 's2;s3'],
['a', 's2', 3, 's2;s3'],
['a', 's3', 3, 's2;s3'],
['b', '', 4, 's1'],
['b', 's1', 5, 's1'],
['c', '', 6, '']],
columns=['col1', 'col2', 'col0', 'col_out'])
我尝试使用变换,但这些都没有提供正确的列。我不拘泥于 groupby,transform,只要工作正常,任何其他方法都可以。
df['col3'] = df.groupby('col1')['col2'].transform(lambda x: ';'.join(x))
df['col4'] = df.groupby('col1', as_index=False)['col2'].transform(lambda x: list(set(x)))
df['col5'] = df['col4'].str.join(';')
解决方案
我认为你很接近,在strip
这里添加一个:
df2['col_out2'] = df2.groupby('col1')['col2'].transform(lambda x: ';'.join(x.unique())).str.strip(';')
它有输出:
col1 col2 col0 col_out col_out2
0 a 1 s2;s3 s2;s3
1 a s2 2 s2;s3 s2;s3
2 a s2 3 s2;s3 s2;s3
3 a s3 3 s2;s3 s2;s3
4 b 4 s1 s1
5 b s1 5 s1 s1
6 c 6
推荐阅读
- android - 如何在按钮单击时添加或删除选项菜单项?
- python - PyInstaller 是否安全地编译 Python 文件?
- automated-tests - Botium 测试用例间歇性和不一致地失败
- python - 我只想将来自 kivy 的 MapView 放在我的应用程序的屏幕中,通过初始菜单上的按钮访问
- amazon-web-services - 设置 EKS 集群后出现错误“调用 AssumeRole 操作时发生错误 (AccessDenied):访问被拒绝”
- javascript - 如果用户未回答 JavaScript 地理定位小狗,如何继续执行代码?
- sql - 如何在 postgres 存储过程中将数据插入到字符串数组中
- android - 与具有碰撞的 3D BIM 模型交互
- python-3.x - 如何使用python将二叉树表示为数组?
- c++ - C++ 模板未在 Linux GCC 上编译