在pandas数据帧的新列中添加列表

2024-10-05 22:45:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个新列,其中包含一组特定列的每一行的数据,创建一个分解到第一级的列。e、 g组:

 Level
   1
   2
   3

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

熊猫有什么数据提示吗?我是怎么破解这个代码的?在

我知道Multiindex必须有一个数组来匹配'Breakdown'。但是数据帧有超过1万个寄存器,我如何将元组与这个范围相结合呢?在

事实上,我有一个原始的数据库,我必须像时间表格式一样重新排列。下面,我可以分享一个小样本: enter image description here

因此,我想按以下格式重新排列数据库: enter image description here


Tags: 数据代码image数据库here格式数组description
1条回答
网友
1楼 · 发布于 2024-10-05 22:45:12

你可以用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)

使用文档中使用的数据,您的数据框将如下所示:

^{pr2}$

编辑:

自从你修改了你的问题,我就想出了一个办法。 有关详细信息,请查看此question 还有熊猫们pandas.DataFrame.stack. 在

因为你只发布图片而不是复制数据,所以我没有使用你的值。但我的示例数据如下:

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"]

相关问题 更多 >