我有一个像这样的csv文件:
,,22-5-2021 (v_c) , 23-5-2021 (v_c)
col_a,col_b,v_c,v_d,v_c,v_d
1,1,2,4,5,6
2,2,2,3,7,6
3,3,2,5,6,5
我需要把它转换成:
col_a,col_b,v_c,v_d,dates
1,1,2,4,22-5-2021
1,1,5,6,23-5-2021
2,2,2,3,22-5-2021
2,2,7,6,23-5-2021
3,3,2,5,22-5-2021
3,3,6,5,23-5-2021
或
col_a,col_b,v_c,v_d,dates
1,1,2,4,22-5-2021
2,2,2,3,22-5-2021
3,3,2,5,22-5-2021
1,1,5,6,23-5-2021
2,2,7,6,23-5-2021
3,3,6,5,23-5-2021
我的方法是使用df。融化了,但我不太明白。也许我迷失了如何为每个两列带来日期。
您可以尝试通过列表推导+pd.wide_to_long()
:
df=pd.read_csv('etc.csv',header=1)
df.columns=[x if x.split('.')[-1].isnumeric() else x+'.0' for x in df]
df=(pd.wide_to_long(df,['v_c','v_d'],['col_a.0','col_b.0'],'drop',sep='.')
.reset_index().sort_values('drop'))
df['dates']=df.pop('drop').map({0:'22-5-2021',1:'23-5-2021'})
df.columns=df.columns.str.rstrip('.0')
df
输出:
col_a col_b v_c v_d dates
0 1 1 2 4 22-5-2021
2 2 2 2 3 22-5-2021
4 3 3 2 5 22-5-2021
1 1 1 5 6 23-5-2021
3 2 2 7 6 23-5-2021
5 3 3 6 5 23-5-2021