簡體   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