Python 动态拆分数据帧中的行

Python 动态拆分数据帧中的行,python,csv,pandas,dataframe,Python,Csv,Pandas,Dataframe,我需要采取一个CSV文件和分裂的行,并有他们级联。输入CSV可以有不同数量的列(总是偶数),但总是以相同的方式拆分。我决定使用Pandas,因为有些文件的输出将是500000行,我认为这会加快速度 输入: h1 h2 h3 h4 h5 h6 A1 A2 A3 A4 A5 A6 B1 B2 B3 B4 B5 B6 预期产量 h1 h2 h3 h4 h5 h6 A1 A2 A1 A2 A3 A4 A1 A2 A3 A4 A5 A6 B1

我需要采取一个CSV文件和分裂的行,并有他们级联。输入CSV可以有不同数量的列(总是偶数),但总是以相同的方式拆分。我决定使用Pandas,因为有些文件的输出将是500000行,我认为这会加快速度

输入:

h1  h2  h3  h4  h5  h6
A1  A2  A3  A4  A5  A6
B1  B2  B3  B4  B5  B6
预期产量

h1  h2  h3  h4  h5  h6
A1  A2
A1  A2  A3  A4
A1  A2  A3  A4  A5  A6
B1  B2
B1  B2  B3  B4
B1  B2  B3  B4  B5  B6
我试着使用下面的代码(通过一些搜索和我自己的编辑拼凑而成),正如你所看到的,这很接近,但不是我所需要的

importFile = pd.read_csv('file.csv')
df = df_importFile = pd.DataFrame(importFile)

index_cols = ['h1']
cols = [c for c in df if c not in index_cols]

df2 = df.set_index(index_cols).stack().reset_index(level=1, drop=True).to_frame('Value')

df2 = pd.concat([pd.Series([v if i % len(cols) == n else ''
                        for i, v in enumerate(df2.Value)], name=col)
             for n, col in enumerate(cols)], axis=1).set_index(df2.index)


df2.to_csv('output.csv')
这就给出了以下结论

h1  h2  h3  h4  h5  h6
A1  A2
A1      A3
A1          A4
A1              A5
A1                  A6
试试这个:

dfNew = pd.DataFrame()
ct = 1
while ct <= df.shape[1]/2 :
    dfNew = dfNew.append(df[df.columns[:2*ct]])
    ct +=1

dfNew.sort_values(['h1'], ascending=[True]).reset_index(drop=True).fillna("")
print df

   h1  h2  h3  h4  h5  h6
0  A1  A2                
1  A1  A2  A3  A4        
2  A1  A2  A3  A4  A5  A6
3  B1  B2                
4  B1  B2  B3  B4        
5  B1  B2  B3  B4  B5  B6
dfNew=pd.DataFrame()
ct=1

虽然这是可行的,但只命中前两行。它需要滚动输入文件中的每一行。@mrh5028 undatedWorked完美!现在就开始了解到底发生了什么。@mrh5028添加了评论。。。为我的懒惰道歉。我没必要这么做,我打算自己试试。但是谢谢!这真的很有帮助!
dfNew = pd.DataFrame()
ct = 1
while ct <= df.shape[1]/2 :
    dfNew = dfNew.append(df[df.columns[:2*ct]])
    ct +=1

dfNew.sort_values(['h1'], ascending=[True]).reset_index(drop=True).fillna("")
print df

   h1  h2  h3  h4  h5  h6
0  A1  A2                
1  A1  A2  A3  A4        
2  A1  A2  A3  A4  A5  A6
3  B1  B2                
4  B1  B2  B3  B4        
5  B1  B2  B3  B4  B5  B6