Python 3.x 垂直组合一列到另一列,并填充其他列中的值

Python 3.x 垂直组合一列到另一列,并填充其他列中的值,python-3.x,pandas,Python 3.x,Pandas,如果在以下数据框中有异常列2019/2/1: date,type,ratio,2019/2/1 2019/1/1,food,0.4,0.3 2019/1/1,vegetables,0.2,0.6 2019/1/1,toy,0.1,0.5 如何将2019/2/1垂直附加到比率 预期结果如下: date type ratio 0 2019/1/1 food 0.4 1 2019/1/1 vegetables 0.2 2 2019/1/

如果在以下数据框中有异常列
2019/2/1

date,type,ratio,2019/2/1
2019/1/1,food,0.4,0.3
2019/1/1,vegetables,0.2,0.6
2019/1/1,toy,0.1,0.5
如何将
2019/2/1
垂直附加到
比率

预期结果如下:

       date        type  ratio
0  2019/1/1        food    0.4
1  2019/1/1  vegetables    0.2
2  2019/1/1         toy    0.1
3  2019/2/1        food    0.3
4  2019/2/1  vegetables    0.6
5  2019/2/1         toy    0.5

第一个想法是在
melt
之前
rename
ratio

df1 = (df.rename(columns={'ratio':'2019/1/1'})
         .drop('date', 1)
         .melt('type',value_name='ratio', var_name='date'))

print (df1)
         type      date  ratio
0        food  2019/1/1    0.4
1  vegetables  2019/1/1    0.2
2         toy  2019/1/1    0.1
3        food  2019/2/1    0.3
4  vegetables  2019/2/1    0.6
5         toy  2019/2/1    0.5
df['date'] = pd.to_datetime(df['date']) 
df2 = df.melt(['date','type'],value_name='ratio') 
df2['date'] = pd.to_datetime(df2.pop('variable'), errors='coerce').fillna(df2['date'])
print (df2)
        date        type  ratio
0 2019-01-01        food    0.4
1 2019-01-01  vegetables    0.2
2 2019-01-01         toy    0.1
3 2019-02-01        food    0.3
4 2019-02-01  vegetables    0.6
5 2019-02-01         toy    0.5
另一个是将
datetime
s列替换为
melt
之后的
date
列:

df1 = (df.rename(columns={'ratio':'2019/1/1'})
         .drop('date', 1)
         .melt('type',value_name='ratio', var_name='date'))

print (df1)
         type      date  ratio
0        food  2019/1/1    0.4
1  vegetables  2019/1/1    0.2
2         toy  2019/1/1    0.1
3        food  2019/2/1    0.3
4  vegetables  2019/2/1    0.6
5         toy  2019/2/1    0.5
df['date'] = pd.to_datetime(df['date']) 
df2 = df.melt(['date','type'],value_name='ratio') 
df2['date'] = pd.to_datetime(df2.pop('variable'), errors='coerce').fillna(df2['date'])
print (df2)
        date        type  ratio
0 2019-01-01        food    0.4
1 2019-01-01  vegetables    0.2
2 2019-01-01         toy    0.1
3 2019-02-01        food    0.3
4 2019-02-01  vegetables    0.6
5 2019-02-01         toy    0.5

使用融化剂
df.melt(['date','type'],value_name='ratio').drop('variable',1)
@ahbon-你需要
(df.rename(columns={'ratio':'2019/1/1')drop('date',1.).melt(['type'],value_name='ratio',var_name='date date'))
?@ahbon或者类似于
df df['date date']=pd.to'datetime(df['date'])]的东西=pd.to_datetime(df.pop('variable'),errors='concurve').fillna(df['date'])
@anky_91,谢谢,但是您的解决方案给出的所有日期都是
2019/1/1
,事实上,附加的行应该是
2019/2/1
@jezrael,谢谢。