我有一个数据帧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?
我已经创建了一个double-for循环,但是在我的例子中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

07-24 09:51
查看更多