Python中的数据转换。有更好的办法吗?

Python中的数据转换。有更好的办法吗?,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,下面是我必须执行的任务的代码片段。我希望此任务具有尽可能最佳的时间复杂度。是否有库或更好的实现 import pandas as pd import numpy as np df1 = pd.DataFrame({"v_id": [1,1,1,2,2,3,3,3,3,5,5], \ "date": ['01-01-2017', '02-01-2017', '03-01-2017',\ '02-01-2017', '

下面是我必须执行的任务的代码片段。我希望此任务具有尽可能最佳的时间复杂度。是否有库或更好的实现

import pandas as pd
import numpy as np

df1 = pd.DataFrame({"v_id": [1,1,1,2,2,3,3,3,3,5,5], \
                    "date": ['01-01-2017', '02-01-2017', '03-01-2017',\
                    '02-01-2017', '03-01-2017',
                    '01-01-2017', '02-01-2017', '03-01-2017', '04-01-2017',\
                    '05-01-2017','04-01-2017'],\
                    "value":[0.9,1.5,2.4,7.1,0.4,1.8,5.1, 6.4, 7.7, 3.9, 0.3]})

dim1, dim2 = df1.v_id.unique(), df1.date.unique()
dim1_dict, dim2_dict = dict(zip(dim1, list(range(0, len(dim1))))), \
                        dict(zip(dim2, list(range(0, len(dim2)))))

value_result, date_result = np.empty((len(dim1), len(dim2)), dtype=object),\
                            np.empty((len(dim1), len(dim2)), dtype=object)


for i in range(0, len(df1)):
    date_result[dim1_dict.get(df1.loc[i].v_id), \
    dim2_dict.get(df1.loc[i].date)] = df1.loc[i].date
    value_result[dim1_dict.get(df1.loc[i].v_id), \
    dim2_dict.get(df1.loc[i].date)] = df1.loc[i].value
数据帧df1如下所示:

我的目标是获得日期结果(v\u id x date)

&值\u结果矩阵(v\u id x值)


您可以使用以下方法执行此计算:

产生一个
日期\u结果

array([['01-01-2017', '02-01-2017', '03-01-2017', None, None],
       [None, '02-01-2017', '03-01-2017', None, None],
       ['01-01-2017', '02-01-2017', '03-01-2017', '04-01-2017', None],
       [None, None, None, '04-01-2017', '05-01-2017']], dtype=object)
和的
值\u结果

array([[ 0.9,  1.5,  2.4,  nan,  nan],
       [ nan,  7.1,  0.4,  nan,  nan],
       [ 1.8,  5.1,  6.4,  7.7,  nan],
       [ nan,  nan,  nan,  0.3,  3.9]])

请注意,
value\u result
是一个带有浮点数据类型的NumPy数组,缺少的值由
nan
s not
None
表示。您可以使用将其转换为具有
object
dtype且缺少
None
值的NumPy数组

value_result = np.where(pd.isnull(value_result), None, value_result)
产生

array([[0.9, 1.5, 2.4, None, None],
       [None, 7.1, 0.4, None, None],
       [1.8, 5.1, 6.4, 7.7, None],
       [None, None, None, 0.3, 3.9]], dtype=object)

您可以使用以下方法执行此计算:

产生一个
日期\u结果

array([['01-01-2017', '02-01-2017', '03-01-2017', None, None],
       [None, '02-01-2017', '03-01-2017', None, None],
       ['01-01-2017', '02-01-2017', '03-01-2017', '04-01-2017', None],
       [None, None, None, '04-01-2017', '05-01-2017']], dtype=object)
和的
值\u结果

array([[ 0.9,  1.5,  2.4,  nan,  nan],
       [ nan,  7.1,  0.4,  nan,  nan],
       [ 1.8,  5.1,  6.4,  7.7,  nan],
       [ nan,  nan,  nan,  0.3,  3.9]])

请注意,
value\u result
是一个带有浮点数据类型的NumPy数组,缺少的值由
nan
s not
None
表示。您可以使用将其转换为具有
object
dtype且缺少
None
值的NumPy数组

value_result = np.where(pd.isnull(value_result), None, value_result)
产生

array([[0.9, 1.5, 2.4, None, None],
       [None, 7.1, 0.4, None, None],
       [1.8, 5.1, 6.4, 7.7, None],
       [None, None, None, 0.3, 3.9]], dtype=object)

谢谢你,你救了我,你救了我