Python Pandas-按单元格中的项数拆分列
我有一个如下所示的数据帧:Python Pandas-按单元格中的项数拆分列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个如下所示的数据帧: 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 = pd.DataFrame({'Name':['Row 1', 'Row 2', 'Row 3', 'Row 4'],
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 = 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', '']})
并希望将原始列拆分为多个列,但将它们分组为5组,如下所示:
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 = 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(', ')
有人有什么建议吗?可能是某种循环,除以原始单元格中的最大数量或项目数
请,谢谢 使用以下公式对每5列求和:
使用
cumcount
和explode
s = df1['Original'].str.split(',').explode().reset_index()
s['idx'] = s.groupby(s['index']).cumcount() // 5
m = s.groupby(["index", "idx"])["Original"].agg(",".join).unstack().fillna("")
m.columns = (m.columns + 1).map(lambda x : 'Group ' + str(x))
df2 = pd.concat([df1,m],axis=1).drop('Original',axis=1)
print(df2)
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
拆分背后的逻辑是什么?我想做一个循环,计算包含“Individual”的列数,然后除以5,然后每x/5创建一个新列…我不知道。。。我肯定是把它弄得太复杂了…像往常一样棒+1我认为expand==True更准确,所以我不必使用explode,但我在开始时也这样想,好吗answer@musclegeekz别忘了绿色勾选答案:)在上面!谢谢@datanovel!