python - Pandas - 按单元格中的项目数拆分列
问题描述
我有一个看起来像这样的数据框:
df1 = pd.DataFrame({'Name':['Row 1', 'Row 2', 'Row 3', 'Row 4'],
'Original':['A, B, C, D, E', 'A, B, C', 'A, B, C, D, E, F, G, H, I, J, K, L', 'A']})
并希望将原始列拆分为多列,但将它们分组为 5 组,如下所示:
df2 = pd.DataFrame({'Name':['Row 1', 'Row 2', 'Row 3', 'Row 4'],
'Group 1':['A, B, C, D, E', 'A, B, C', 'A, B, C, D, E', 'A'],
'Group 2':['', '', 'F, G, H, I, J', ''],
'Group 3':['', '', 'K, L', '']})
我试过做这样的事情,但我很确定有更好的方法来做到这一点......
df1 = pd.DataFrame({'Name':['Row 1', 'Row 2', 'Row 3', 'Row 4'],
'Original':['A, B, C, D, E', 'A, B, C', 'A, B, C, D, E, F, G, H, I, J, K, L', 'A']})
df2 = df1.join(df1['Original'].str.split(', ', expand=True).add_prefix('Individual '))
df2 = df2.fillna('')
df2['Group 1'] = (df2['Individual 0'] + ', ' +df2['Individual 1'] + ', ' + df2['Individual 2'] + ', ' + df2['Individual 3'] + ', ' + df2['Individual 4'] + ', ').str.strip(', ')
df2['Group 2'] = (df2['Individual 5'] + ', ' +df2['Individual 6'] + ', ' + df2['Individual 7'] + ', ' + df2['Individual 8'] + ', ' + df2['Individual 9'] + ', ').str.strip(', ')
有人有什么建议吗?也许某种循环除以原始单元格中的最大数量或项目?
谢谢,麻烦您了!
解决方案
使用GroupBy.sum
对每 5 列求和np.arange
:
df3 = df1['Original'].str.split(',', expand=True).fillna('').add(',')
len_cols = len(df3.columns)
df1[['Name']].join(df3.groupby(np.arange(len_cols) // 5, axis=1)
.sum()
.stack()
.str.rstrip(',')
.unstack()
.rename(columns=dict(zip(range(len_cols),
range(1, len_cols + 1))))
.add_prefix('Group '))
Name Group 1 Group 2 Group 3
0 Row 1 A, B, C, D, E
1 Row 2 A, B, C
2 Row 3 A, B, C, D, E F, G, H, I, J K, L
3 Row 4 A
推荐阅读
- java - 如何在 java swing 中更改我的 JFrame 标题栏设计?
- .net - 命令在本地运行时输出日志,但在服务器上运行时不输出
- python - 我的函数必须返回 10 个最常用的单词同时排除单词,但它看起来应该不起作用
- react-native - 以编程方式按下按钮反应原生
- python - 使用 selenium-wire 和 Pyinstaller 时出现错误 No such file or directory
- sql-server - MSSQL - 样板代码重复和交叉问题
- python - 使用 X 和 Y 在 matplotlib 上使用 python 绘制方位
- sql - 从 HIVE 表中获取最新的分区
- python - 如何在熊猫数据框中将多列从字符串转换为整数?
- multithreading - Apache Camel Jetty 组件线程在测试期间不停止(自定义minThreads maxThreads)