python-3.x - 按照列存在的顺序将列值转换为行
问题描述
下面是我拥有的示例数据框。我需要根据月份将每一行转换为多行。
df = pd.DataFrame({'Jan': [100,200,300],
'Feb': [400,500,600],
'March':[700,800,900],
})
期望的输出:
Jan 100
Feb 400
March 700
Jan 200
Feb 500
March 800
Jan 300
Feb 600
March 900
尝试使用 pandas melt 功能,但它所做的是将 Jan 组合在一起,然后是二月和三月。就像一月的 3 行,二月的 3 行和三月的一样。但我想实现上述输出。有人可以帮忙吗?
解决方案
使用withDataFrame.stack
进行一些数据清理:Series.reset_index
Series.rename_axis
df1 = (df.stack()
.reset_index(level=0, drop=True)
.rename_axis('months')
.reset_index(name='val'))
或使用numpy
- 展平值并通过以下方式重复列名称numpy.tile
:
df1 = pd.DataFrame({'months': np.tile(df.columns, len(df)),
'val': df.values.reshape(1,-1).ravel()})
print (df1)
months val
0 Jan 100
1 Feb 400
2 March 700
3 Jan 200
4 Feb 500
5 March 800
6 Jan 300
7 Feb 600
8 March 900
推荐阅读
- python - 应用返回错误消息的函数:“时间戳”对象不可下标
- javascript - Vaadin 14 Springboot javascript不起作用
- ios - 安装 Cocoapods 时出错:[!] Invalid `Podfile` 文件:未定义的局部变量或方法 `cocoapods' 用于#
- algorithm - 我的递归记忆解决方案的运行时间是多少
- config - Mosquitto Bridge 主题设置忽略模式
- notion-api - 如何从 Notion 中删除表中的一行?
- powerbi - 如何在 Power BI 中的两行计算中添加新列?
- python - 如果字符串中没有空格,如何在字符串中添加空格?
- node.js - 猫鼬不在nodejs中获取数据
- docker - 检查访问了多少 docker 映像?