簡體   English   中英

在熊貓,多個列名中對數據框進行排序時出現問題

[英]Problems sorting dataframe in pandas, multiple column names

我是使用python和pandas的初學者。 我正在嘗試保存通過函數產生的一些結果。 我目前在生成具有所需結果的數據幀時遇到一些問題。 這是我編寫的一個可迭代函數的示例(為簡化說明,我使用了幾個三角形面積的示例。我的真實函數更復雜,並且有幾個中間步驟):

Base = 5
H = [1, 2, 3, 4, 5]

for i in H:

    def Triangle_area():

        H = [i]
        ratio = (Base*H)
        area = np.divide(ratio,2)

        ms = pd.DataFrame(area, columns=[i])
        A = ms[i].mean()
        A1 = pd.DataFrame({'area':A}, index=[i])

        return A1


    areas = Triangle_area()
    print(areas)

結果是一個數據幀或一系列數據幀,如下所示:

   area
1   0.5
   area
2   1.0
   area 
3   1.5
   area
4   2.0
   area
5   2.5

但是我想要的應該是這樣的:

H   area
1   0.5
2   1.0
3   1.5
4   2.0
5   2.5

我認為必須存在幾種方法來執行此操作,但是我找不到方法。 預先感謝您的評論。

您在示例中每次都在創建並返回一個新的數據框,這不是您想要的。 這是您的三角程序的示例,該程序將返回一個帶有結果的數據幀。 希望對您有所幫助,您可以找到解決問題的方法,如果需要更多幫助,請告訴我

import pandas as pd
import numpy as np


def Triangle_area(height, base):
    '''
    Calculate the area of a right angle triangle, Area(height, base) = (base*height)/2
    Put all results in pandas dataframe before returning
    '''
    H = np.array(height)    # Make numpy array of heights, easier for our computations
    ratio = H * base        
    area = ratio/2
    A1 = pd.DataFrame({'H': height, 'area':area}) # Turn results into pandas dataframe

    return A1 # return column


Base = 5
H = [1, 2, 3, 4, 5]

areas = Triangle_area(H, Base)
print(areas)

始終首先嘗試使用向量化方法:

In [115]: def Triangle_area(base, h):
     ...:     return base * h / 2.
     ...:

In [116]: df = pd.DataFrame({'base':[1,2,3,4,5], 'h':[5]*5})

In [117]: df
Out[117]:
   base  h
0     1  5
1     2  5
2     3  5
3     4  5
4     5  5

In [118]: df['area'] = Triangle_area(df['base'], df['h'])

In [119]: df
Out[119]:
   base  h  area
0     1  5   2.5
1     2  5   5.0
2     3  5   7.5
3     4  5  10.0
4     5  5  12.5
def Triangle_area():

    '''
    @param Base, scalar length of triangle base
    @param H, array of various triangle heights
    @returns A1, dataframe with columns 'H' and 'area'
        corresponding to height and area of triangle with 
        that height
    '''

    ratio = Base*np.array(H)
    area = np.divide(ratio,2)

    A1 = pd.DataFrame({'H':np.array(H),'area':area})

    return A1

areas = Triangle_area()
print(areas)

在這里,我試圖保留與您相同的函數和全局變量名稱。 一些技巧:

  • 將列表H轉換為NumPy數組(NumPy與熊貓配合得很好,如果您還不熟悉它,我建議您對其進行研究)。

  • 代替使用for loop ,直接對數組進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM