我有25个2列数据帧,我希望将第0列除以第1列,以产生第3列 - 即在第25个数据帧的每一个上添加第3列。
我相信我的问题是在循环中正确地“识别”数据帧。到目前为止,我一直在尝试:
for country in countries.index:
data = [country].iloc[:, 0] / [country].iloc[:,1]
[country].Ratio = [country].data
其中countries.index是数据框的国家/地区列表(索引)。但是这给出了错误:
AttributeError:'list'对象没有属性'iloc'
我已经尝试了上面的几种变体,以及在键之前包含vars(),但我似乎无法解决。
每个数据框的名称与countries.index
中每个国家/地区的名称相匹配答案 0 :(得分:0)
你不需要循环使用价值观。如果需要遍历数据框,可以创建数据框列表,然后可以直接使用pandas的apply方法,也可以直接划分数据框的列。
countries = [country1, country2, country3] # list of dataframes
for country in countries:
country['ratio'] = country['data1']/country['data2']
现在,列表中的每个数据框都会有一个新的ratio
列。
答案 1 :(得分:0)
您获得的错误表明您根本不在数据框上运行。此外,您的语法不正确。
def add_ratio(df):
df['ratio'] = df.iloc[:,0] / df.iloc[:,1]
return df
另外,根据您的问题,听起来您的意思是您的数据帧长度为25个条目,而不是25个独立的数据帧。
如果您有一个名为“countries”的数据框列表:
for country in countries:
country['ratio'] = country.iloc[:,0] / country.iloc[:,1]
或
for country in countries:
country = add_ratio(country)
如果您正在讨论名为包含25个国家/地区的国家/地区的数据框:
countries['ratio'] = countries.iloc[:,0] / countries.iloc[:,1]