python - 将 3 列数据框转换为矩阵
问题描述
我有一个数据框 df,例如:
A = [["John", "Sunday", 6], ["John", "Monday", 3], ["John", "Tuesday", 2], ["Mary", "Sunday", 6], ["Mary", "Monday", 4], ["Mary", "Tuesday", 7]]
df = pandas.DataFrame(A, columns=["names", "dates", "times"])
我想重塑它,以便我可以创建一个矩阵,而不是三列,其中第一列索引行,第二列索引列,第三列成为矩阵值,例如:
B = [["John", 6, 3, 2], ["Mary", 6, 4, 7]]
df2 = pandas.DataFrame(B, columns=["names", "Sunday", "Monday", "Tuesday"])
甚至更好:
B = numpy.asarray(B)
B = pandas.DataFrame(B)
如何将 A 转换为 B?
我创建了一个双循环,但在我的情况下 df 非常大并且需要很长时间。有更好的方法吗?
这不仅仅是重塑,因为 A 有 18 个值,B 有 8 个
解决方案
您可以使用pivot_table()
,例如:
In []:
df.pivot_table(columns='dates', index='names', values='times').reset_index()
Out[]:
dates names Monday Sunday Tuesday
0 John 3 6 2
1 Mary 4 6 7
推荐阅读
- c# - 'TypeBuilder' 类处理泛型参数时有什么问题吗?
- python - 使用nameko运行服务时如何停止初始类
- python - 测试 Numpy 运算符的简单方法是什么?
- php - mysqli_error() 连接信息
- jvm - org.apache.coyote.RequestInfo 无法回收,内存中发现大量实例
- c# - 更改服务。AddScoped
(); 到 services.AddTransient(); 因为没有 dispose 方法? - postgresql - 如何从 amq 代理 redhat 路由或消费到 postgresql?
- c - 共享内存中的 POSIX 未命名信号量未响应发布或等待
- java - 绕过java中静态方法的早期绑定
- docker - 在 docker-compose 中添加默认外部网络