[英]Pandas Concat to Multiindex on Columns
一直在玩这个。 我正在处理测试数据,其中我有一系列测试点、一系列传感器,并且对于每个传感器,我都有 min/max/avg/stdev 数据。
我曾尝试过在每个标签的末尾简单地附加例如“_min”并创建一个 nColumns*3 宽度的 dataframe 的想法。 但是......这感觉很糟糕 - 当我调用 plot 变量时,我将不得不处理字符串值以添加该后缀......感觉很笨拙。
似乎多索引是正确的方法,这将允许我单独处理传感器名称和测量。
我目前正在阅读以下数据:
data = pd.read_excel(os.path.join(working_path, working_dir, staticDataFileName),
sheet_name='sheet', skiprows = 6, nrows=2000, usecols = 'A,D:G', names = ["Tag", "Min", "Max", "Avg", "Stdev"], dtype={'Tag': str})
然后我将 dataframe 拆分为每个单独的变量。
df_min = data[["Tag", "Min"]]
...
我目前有一些代码在工作,我只有一个平均值。
temp = readRawData(wd, f, dataset)
# Drop the bad rows
temp.drop(temp.index[temp['Tag'] == '0'], inplace = True)
temp2 = temp.T
temp2.rename(columns=temp2.iloc[0], inplace = True)
temp2.drop(temp2.index[0], inplace = True)
我需要转置 dataframe 以获取标签名称作为列,然后将列设置为标签名称。 然后我删除第一个索引,现在它只是标签名称。 在我的代码中,我遍历所有文件,并为所有数据点创建 dataframe
data = pd.concat([data, temp2])
在那里的某个地方,我需要弄清楚如何创建这个多索引 dataframe。 pandas 用户指南LINK中给出的大多数示例都有多级索引,而不是列。 他们给出的例子..我很难理解。
我正在寻找有关如何采取一系列 dataframe 的指导,看起来像
df_min
Tag1 Tag2 TagN
0 min1 min2 minN
df_avg
Tag1 Tag2 TagN
0 avg1 avg2 avgN
并将它们组合成
df
Tag1 Tag2 ... TagN
Min Max Avg Min Max Avg Min Max Avg
0 min1 max1 avg1 min2 max2 avg2 minN maxN avgN
当然,这是一个可怕的想法,请告诉我。 谢谢!
我可以在这里使用解决方案来完成这项工作: https://stackoverflow.com/a/47338266/14066896
它不漂亮......但它似乎正在工作
for f in staticDataFileName:
temp_all = readRawData(wd, f)
temp_all.drop(temp_all.index[temp_all['Tag'] == '0'], inplace = True)
column_list = []
steady_dict = dict()
temp = temp_all.T
temp.rename(columns=temp.iloc[0], inplace=True)
temp.drop(temp.index[0], inplace=True)
temp.reset_index(inplace=True)
temp.drop(columns=['index'], inplace=True)
#create column names
for column in temp.columns:
column_list.append((column, "Min"))
column_list.append((column, "Max"))
column_list.append((column, "Avg"))
column_list.append((column, "Stdev"))
j = 0
for columnName, columnData in temp.iteritems():
temp_dict = dict()
temp_dict["Min"] = temp.iloc[0, j]
temp_dict["Max"] = temp.iloc[1, j]
temp_dict["Avg"] = temp.iloc[2, j]
temp_dict["Stdev"] = temp.iloc[3, j]
j += 1
steady_dict[columnName] = temp_dict
t = pd.DataFrame(steady_dict).unstack().to_frame().T
t.columns = pd.MultiIndex.from_tuples(column_list)
#correctStaticData(temp2, wd2)
data = pd.concat([data, t])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.