[英]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.