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 notNone
表示。您可以使用将其转换为具有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 notNone
表示。您可以使用将其转换为具有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)
谢谢你,你救了我,你救了我