【问题标题】:Efficient way of converting pandas DataFrame to matrices将 pandas DataFrame 转换为矩阵的有效方法
【发布时间】:2021-03-01 08:09:49
【问题描述】:

我有 pandas DataFrames,它有一个“x”列和一个“y”列,它们代表表面中的点,然后是许多具有这些点属性的列。从这里我需要创建矩阵来绘制这些数据。这是我目前正在做的 MWE:

import pandas
import numpy
import matplotlib.pyplot as plt

df = pandas.DataFrame(
    {
        'x': [1,1,1,2,2,2,3,3,3],
        'y': [4,5,6,4,5,6,4,5,6],
        'z': [1,2,3,4,5,6,7,8,9],
    }
)

x_values = sorted(set(df['x']))
y_values = sorted(set(df['y']))
xx, yy = numpy.meshgrid(x_values, y_values)
zz = numpy.zeros(xx.shape)
zz[:] = float('NaN')
for nx,x in enumerate(x_values):
    for ny,y in enumerate(y_values):
        zz[ny,nx] = float(df.loc[(df['x']==x) & (df['y']==y), 'z'])

plt.pcolormesh(xx,yy,zz)
plt.show()

这可行,但速度很慢(当 df 有 100 万行时)。有没有更好的方法呢?

【问题讨论】:

    标签: python pandas dataframe matrix


    【解决方案1】:

    pivot_table 将完成这项工作:

    zz = df.pivot_table('z', 'y', 'x').to_numpy()
    
    print(zz)
    array([[1, 4, 7],
           [2, 5, 8],
           [3, 6, 9]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 2021-05-15
      • 2016-12-24
      • 2014-04-07
      • 1970-01-01
      • 2017-10-26
      相关资源
      最近更新 更多