繁体   English   中英

Pandas 连接到列上的多索引

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM