簡體   English   中英

在熊貓數據框中的新列中添加列表

[英]adding list in a new column in a pandas dataframe

我想創建一個新列,其中包含針對特定列的每一行的一組數據,以創建第一級細分。 例如:

 Level
   1
   2
   3

 Level  Breakdown
   1
           a
           b
           c
           d
   2   
           a
           b
           c
           d
   3
           a
           b
           c
           d 

有什么提示如何在熊貓數據幀上編碼此細分?

我知道Multiindex必須具有一個數組來匹配“ Breakdown”。 但是數據幀有超過1萬個寄存器,我如何將我的元組與這樣的范圍結合起來?

實際上,我有一個原始數據庫,必須像計划格式一樣重新排列。 以下,我可以分享一個小樣本: 在此處輸入圖片描述

因此,我想以這種格式重新排列數據庫: 在此處輸入圖像描述

您可以使用Multiindex實現

但是您將需要一個額外的索引來表示a,b,c,d

arrays = [["1", "1", "1", "2", "2", "2", "2", "3", "3", "3", "3"],
      ["a", "b", "c", "a", "b", "c", "a", "b", "c"]] 
tuples = list(zip(*arrays))

index = pandas.MultiIndex.from_tuples(tuples, names=['Levels','Breakdown'])

s = pandas.DataFrame("your_data", index=index)

使用文檔中使用的數據,您的數據框將如下所示:

Levels Breakdown          
1      a         -0.985654
       b          0.782516
       c         -0.896590
2      a          0.841488
       b         -0.577790
       c         -1.130534
       a          0.587779
3      b         -0.935374
       c          1.658043

編輯:

自從您編輯問題后,我提出了建議。 有關詳細信息,請查看此問題以及pandas.DataFrame.stack上的pandas 文檔

由於您僅發布圖片而不是復制數據,因此我沒有使用您的值。 但是我的樣本數據看起來像這樣:

d = {"Line": ["foo", "bar", "baz"], "CUT START": ["a", "b", "c"], 
"CUT FINISH": ["x", "y", "z"],
"END START" :[1, 2, 3], "END FINISH": [4, 5, 6]}

   Line   CUT START CUT FINISH  END START  END FINISH
0  foo         a          x          1           4
1  bar         b          y          2           5
2  baz         c          z          3           6

我像這樣轉換它:

# Set line as index
df = df.set_index("Line")

activitys = ["CUT", "END"]  # Add the rest of your activitys here
status = ["START", "FINISH"]

df.columns = pandas.MultiIndex.from_product([activitys, status])

返回:

           CUT          END       
     START FINISH START FINISH
Line                          
foo      a      x     1      4
bar      b      y     2      5
baz      c      z     3      6

然后,您可以堆疊。

df = df.stack(0)

         FINISH START
Line                 
foo  CUT      x     a
     END      4     1
bar  CUT      y     b
     END      5     2
baz  CUT      z     c
     END      6     3

現在您只需要重新排序

df.columns = ["START", "FINISH"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM