继续发布Pandas Multiple DataFrames from other DataFrames。
设法遍历多个较小的数据框(请注意,超市名称是手动添加的,以帮助理解问题;数据框名称不作为数据框的属性而存在):
Loblaws
Summer Winter
Milk -7800.0 -3600.0
Salt -9000.0 -4500.0
Pear -15300.0 -11700.0
Wal-Mart
Summer Winter
Milk -14700.0 -10200.0
Salt -7500.0 -4800.0
Pear -3000.0 -9600.0
Whole Foods
Summer Winter
Milk -11500.0 -7500.0
Salt -7000.0 -8500.0
Pear -1000.0 -6500.0
并与“季节”中的“基本”数据框合并:
for df in locationlist:
df = df.transpose()
merged_dataframe = pd.merge(dfs, df, left_on='Season',right_index = True)
merged_dataframe.name = str(df)
merged_dataframes.append(merged_dataframe)
display(merged_dataframe)
通过转置使输出看起来像:
Season Milk Salt Pear
Date
2018-01-24 Winter -7500.0 -8500.0 -6500.0
2018-01-25 Winter -7500.0 -8500.0 -6500.0
2018-01-26 Winter -7500.0 -8500.0 -6500.0
2018-01-27 Winter -7500.0 -8500.0 -6500.0
2018-01-28 Winter -7500.0 -8500.0 -6500.0
... ... ... ... ...
但是,尝试使用以下方法将名称作为属性返回:
for dfs in merged_dataframes:
print(dfs.name)
以预先合并的格式打印每个超市的各个数据框,例如:
Milk Salt Pear
Summer -7800.0 -9000.0 -15300.0
Winter -3600.0 -4500.0 -11700.0
Milk Salt Pear
Summer -14700.0 -7500.0 -3000.0
Winter -10200.0 -4800.0 -9600.0
Milk Salt Pear
Summer -11500.0 -7000.0 -1000.0
Winter -7500.0 -8500.0 -6500.0
答案 0 :(得分:1)
...从上一个问题继续...
我看到这里发生了什么:
当您执行merged_dataframe.name = str(df)
时,您似乎想要数据框来自的变量的名称,
实际发生的是,您将df引用的整个数据框(原始的超级市场数据框)转换为字符串(使用str方法),然后将整个数据框分配为名称。
实际打印名称后,您将获得名称,即整个数据帧…
我有个好消息和个坏消息:
坏消息:当您编写以下行时,您无法恢复最初引用该数据帧的变量的名称:supermarkets = [loblaws, wal_mart, whole_foods]
该变量名无法从循环内访问。
好消息:您可以通过在for循环之前执行以下操作来为原始数据帧分配名称变量来解决此问题:
merged_dataframes = []
# first put all dataframes in a list
Loblaws.name = "Loblaws"
Wal_Mart.name = "Wal-Mart"
Whole_foods.name = "Whole Foods"
supermarkets = [loblaws, wal_mart, whole_foods]
for df in locationlist:
name_str = df.name
df = df.transpose()
merged_dataframe = pd.merge(dfs, df, left_on='Season',right_index = True)
merged_dataframe.name = name_str
merged_dataframes.append(merged_dataframe)
我希望这对您有用!让我知道怎么回事!
答案 1 :(得分:0)
import pandas as pd
columns = ['summer','winter']
index = ['milk','salt','pear']
dfs = {
'Loblaws': pd.DataFrame([[-7800.0,-3600.0],[-9000.0,-4500.0],[-15300.0,-11700.0]], columns=columns, index=index),
'Wal-Mart': pd.DataFrame([[-14700.0,-10200.0],[-7500.0,-4800.0],[-3000.0,-9600.0]], columns=columns, index=index),
'Whole Foods': pd.DataFrame([[-11500.0,-7500.0],[-7000.0,-8500.0],[-1000.0,-6500.0]], columns=columns, index=index)
}
for df in dfs:
dfs[df] = dfs[df].transpose()
dfs[df]['season'] = dfs[df].index
dfs[df]['name'] = [df for _ in range(len(dfs[df]))]
dfs[df].reset_index(drop=True, inplace=True)
merged_df = pd.concat(dfs.values(), axis=0)
merged_df.reset_index(drop=True, inplace=True)