我是初学者,使用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
我认为必须有几种方法可以做到这一点,但我找不到办法。提前感谢您的意见。
答案 0 :(得分:0)
您每次在示例中创建并返回一个新数据帧,这不是您想要的。以下是三角形程序的示例,它将返回一个包含结果的数据框。我希望这会有所帮助,您可以找到如何将其应用到您的问题中,如果您需要更多帮助,请告诉我
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)
答案 1 :(得分:0)
首先尝试使用矢量化方法:
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
答案 2 :(得分:0)
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与pandas的效果非常好,如果您不熟悉它,我建议您查看它。)
不使用for loop
,而是直接对数组进行操作。