Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas-按单元格中的项数拆分列_Python_Pandas_Dataframe - Fatal编程技术网

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!