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,谢谢。