将每行拆分为多行合并列

2024-05-20 02:32:16 发布

您现在位置:Python中文网/ 问答频道 /正文

更新我的问题让它更清楚。 我有一个CSV文件,它有多个列/行。 我是这样读的

in_csv = pd.read_csv(inputFileName.csv)

一般来说,列的格式是这样的

^{pr2}$

某些行的值位于Def1Def_1xDef_1yDef2Def_2xDef_2y。其他行只有Def1Def_1xDef_1y中的值。 我想用另一个csv输出如下:

  1. 新行有列Col1,Col2,Col3,JK,KK,...,Def1,Def_1x,Def_1y(否Def2Def_2xDef_2y
  2. 如果输入csv中的row_iDef_2xDef_2y中没有值,那么在输出csv中复制同一行(不带最后三个col)
  3. 如果输入csv中的row_jDef_2xDef_2y中有值,那么在输出csv中将其拆分为两行。一行带有Def1Def_1xDef_1y,第二行的值在Def2Def_2xDef_2y复制到输出csv的Def1Def_1xDef_1y
  4. 将一行拆分为两行后,保持相同的行顺序
  5. 最后6列全部为空的行,保持原样

输入示例:

Col1,Col2,Col3,JK,KK,...,Def1, Def_1x,Def_1y,Def2,Def_2x,Def_2y
A1,B1,C1,....,a,0.2,0.3,,,
A2,B2,C2,.....,b,0.4,0.5,b,0.6,0.7
A3,B3,C3,.....,b,0.8,0.9,,,
A4,B4,C4,.....,,,,,,

预期产量:

Col1,Col2,Col3,JK,KK,...,Def1, Def_1x,Def_1y
A1,B1,C1,....,a,0.2,0.3
A2,B2,C2,.....,b,0.4,0.5
A2,B2,C2,.....,b,0.6,0.7
A3,B3,C3,.....,b,0.8,0.9
A4,B4,C4,.....,,,

行的顺序是相同的A1A2A2A3A4。一旦一行被拆分,副本就在下面,而不是csv的底部。在

如果我可以像下面这样添加另一个专栏(RANK),那将是一个非常感谢的奖励。对于非拆分行,它基本上总是1。一分为二的行,为1:2。在

Col1,Col2,Col3,JK,KK,...,RANK,Def1, Def_1x,Def_1y
A1,B1,C1,....,1,a,0.2,0.3
A2,B2,C2,.....,1,b,0.4,0.5
A2,B2,C2,.....,2,b,0.6,0.7
A3,B3,C3,.....,1,b,0.8,0.9
A4,B4,C4,.....,,,,

非常感谢。在


Tags: csva2defa1b2a3col2col3
2条回答

使用^{}来堆叠X和{}项。在

使用df作为Pandas数据帧:

  Col1 Col2   X1   X2   Y1   Y2
0   A1   B1  0.2  0.3  NaN  NaN
1   A2   B2  0.4  0.5  0.6  0.7

XY项分开,然后concat()

^{pr2}$

这里有一种方法

In [1580]: pd.concat(
             [df.loc[:,cols.str.contains(p)]
                .rename(columns={'Y1':'X1','Y2':'X2'})
                .dropna() for p in ['Col|X', 'Col|Y']],
             ignore_index=True)
Out[1580]:
  Col1 Col2   X1   X2
0   A1   B1  0.2  0.3
1   A2   B2  0.4  0.5
2   A2   B2  0.6  0.7

相关问题 更多 >