我在 python 中有一个非常大的数据集,它来自一个网络 CDF 文件。列名是纬度,索引是经度。对于数据库中的每个索引/列,都有我感兴趣的 az 值。我想要一个包含 columns 的新数据框['Latitude','Longitude','Z']。我能够使用 itertools 提出一个解决方案,但我的数据框尺寸是 (7200,14400) 给了我 103,680,000 个值来迭代。有没有更有效的方法来做到这一点。我在这里提供了一个示例输入和输出,以便于测试。pandas 中是否有一个 pivot 函数或其他有效的方法来解决这个问题?
#import libraries
import numpy as np
import pandas as pd
import itertools
#Create Sample Data
columns=['a','b','c']
rows=['1','2','3']
d_base=np.array([0.1,0.2,0.3])
data=np.tile(d_base,(3,1))
#create df
df=pd.DataFrame(data,columns=columns,index=rows)
df
Out[]
a b c
1 0.1 0.2 0.3
2 0.1 0.2 0.3
3 0.1 0.2 0.3
这是可行但速度慢的解决方案。
#iterate all combinations of columns and rows
col_index_pairs=list(itertools.product(columns, rows))
desired_output=pd.DataFrame()
#lookup the value of each possible pair in the original dataframe and put it into a new one.
for item in col_index_pairs:
desired_output[item]=[item[0],item[1],df.loc[item[1],item[0]]]
desired_output=desired_output.T
desired_output.columns=['Latitude','Longitude','Z']
desired_output
Out[]:
Latitude Longitude Z
a 1 0.1
a 2 0.1
a 3 0.1
b 1 0.2
b 2 0.2
b 3 0.2
c 1 0.3
c 2 0.3
c 3 0.3
慕桂英3389331
相关分类