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
到ratio
?
预期的结果将是这样的:
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
解决方案
第一个想法是之前的rename
列:ratio
melt
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
另一个是将datetime
s 从列替换到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
推荐阅读
- vb.net - 如何使用 VB.Net 2015 从串口读取 HEX 值
- jquery - 如何获得闪烁的光标而不是选择
- spring - 如何使用spring boot加载图像列表并在html中显示
- php - 我无法理解 SOLID 原则
- rest - REST API 设计:做,然后撤消
- javascript - 记录来自 Puppeteer Node.js 进程的客户端代码中的“控制台”调用
- php - Laravel mysql加入问题
- c - C - 指向字符串数组的指针不起作用
- arrays - PyPNG 无法使用 32 位数组输入制作图像
- mapbox - 在 Mapbox GL JS 中覆盖 GeoTIF 的主要问题