将 pandas df 中的列名称和索引转换为列本身的有效方法,并将相应的值作为第三列?

我在 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

    


牧羊人nacy
浏览 115回答 1
1回答

慕桂英3389331

你可以检查melts = df.reset_index().melt('index')Out[18]:    index variable  value0      1        a    0.11      2        a    0.12      3        a    0.13      1        b    0.24      2        b    0.25      3        b    0.26      1        c    0.37      2        c    0.38      3        c    0.3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python