首页 > 解决方案 > 在python中重塑数据框的列值

问题描述

我有一个像下面这样没有标题的数据框。

当前df:

Col 0    Col 1   Col 2   Col3  
2345      abcd  mobile    oneplus
4567      abbb  internet  explorer 
mozilla   2345  cccc      dddd 
eeee      bbbb  1234      hello

我希望将数字值(即ID)作为第一列(列索引 0)。

如果在任何一行中,数字值移动到Col 1,组合Col 1Col2值并将其放入Col 1,然后将Col3值放入Col2,然后Col0将下一行的值作为上一行的Col3

预期输出如下:

Col 0     Col 1          Col 2    Col3  
2345      abcd           mobile    oneplus 
4567      abbbinternet   explorer  mozilla
2345      ccccdddd        eeee     bbbb    
1234      hello  

非常感谢帮助!谢谢 ..

标签: pythonpandasdataframe

解决方案


stack您可以使用,set_index和这样做unstack

from io import StringIO

txt = StringIO("""2345      abcd  mobile    oneplus
4567      abbb  internet  explorer 
mozilla   2345  cccc      dddd 
eeee      bbbb  1234      hello""")

df = pd.read_csv(txt, header=None, sep='\s+')

df = df.stack().reset_index(drop=True)

df1 = df.to_frame().set_index(df.str.isnumeric().cumsum())

df_out = df1.set_index(df1.groupby(level=0).cumcount(), append=True)[0].unstack()
df_out

输出:

      0      1         2         3        4
1  2345   abcd    mobile   oneplus      NaN
2  4567   abbb  internet  explorer  mozilla
3  2345   cccc      dddd      eeee     bbbb
4  1234  hello       NaN       NaN      NaN

推荐阅读