首页 > 解决方案 > 将一列垂直组合到另一列并填充 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/1ratio

预期的结果将是这样的:

       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

标签: python-3.xpandas

解决方案


第一个想法是之前的rename列:ratiomelt

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

另一个是将datetimes 从列替换到date列之后melt

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

推荐阅读