当前位置: 首页 > 知识库问答 >
问题:

从退出的列名中在Pandas DataFrame中创建一个新列

李泓
2023-03-14

我想解构一个pandas DataFrame,使用列标题作为一个新的数据列,并创建一个包含行索引和列的所有组合的列表。比解释更容易展示的:

index_col = ["store1", "store2", "store3"]
cols = ["January", "February", "March"]
values = [[2,3,4],[5,6,7],[8,9,10]]
df = pd.DataFrame(values, index=index_col, columns=cols)
[['store1', 'January', 2],
 ['store1', 'February', 3],
 ['store1', 'March', 4],
 ['store2', 'January', 5],
 ['store2', 'February', 6],
 ['store2', 'March', 7],
 ['store3', 'January', 8],
 ['store3', 'February', 9],
 ['store3', 'March', 10]]

共有1个答案

韩阳飙
2023-03-14

我更喜欢叠而不是拆,然后交换层次:

>>> df.stack().reset_index().to_numpy()
array([['store1', 'January', 2],
       ['store1', 'February', 3],
       ['store1', 'March', 4],
       ['store2', 'January', 5],
       ['store2', 'February', 6],
       ['store2', 'March', 7],
       ['store3', 'January', 8],
       ['store3', 'February', 9],
       ['store3', 'March', 10]], dtype=object)
>>> 

或者使用meltignore_index=false:

>>> df.melt(ignore_index=False).reset_index().to_numpy()
array([['store1', 'January', 2],
       ['store2', 'January', 5],
       ['store3', 'January', 8],
       ['store1', 'February', 3],
       ['store2', 'February', 6],
       ['store3', 'February', 9],
       ['store1', 'March', 4],
       ['store2', 'March', 7],
       ['store3', 'March', 10]], dtype=object)
>>> 
 类似资料:
  • 问题内容: 我有许多排序后的集合用作系统上的二级索引,用户查询可能会碰到其中的一些。 要使用这些索引来使所有30岁以下且得分> 2的用户 但这意味着我已将所有数据从redis复制到我的应用服务器以执行交叉,是否有更有效的方法来执行此操作,而不是通过网络传输所有匹配范围,而是在Rediss中进行交叉? 我想要的是 ZRANGEBYSCORESTORE在其中执行ZRANGEBYSCORE操作并将结果存

  • 本文向大家介绍dart 创建一个新列表,包括了dart 创建一个新列表的使用技巧和注意事项,需要的朋友参考一下 示例 列表可以通过多种方式创建。 推荐的方法是使用List文字: 该List构造可以作为很好: 如果您喜欢更强的键入,还可以通过以下方式之一提供类型参数: 为了创建一个小的可增长列表,该列表为空或包含一些已知的初始值,首选文字形式。对于其他种类的列表,有专门的构造函数: 另请参阅关于集合

  • 问题内容: 在Python中创建新的空列表的最佳方法是什么? 要么 我之所以这样问是因为两个原因: 技术原因,关于哪个更快。(创建一个类会导致开销吗?) 代码可读性-这是标准约定。 问题答案: 您可以通过以下方法测试哪段代码更快: 但是,实际上,这种初始化很可能只是程序的一小部分,因此担心此初始化可能会出错。 可读性非常主观。我更喜欢,但是像AlexMartelli这样的一些非常博学的人更喜欢,因

  • 我有一个带有Person对象的数据库表。我的网络服务接收一个Person对象列表来更新这个Person表。我的应用程序现在包含两个列表: 我想遍历这些列表,并创建一个新列表,用于更新Person表。 fName和lName用于识别现有记录。下面是一个例子。 现在的 乔,布洛格斯,18岁,joe@me.com 简,布洛格斯,21岁,jane@me.com 弗洛,布洛格斯,25岁,flo@me.com

  • 问题内容: 尝试从计算中创建新列。在下面的代码中,我获得了每个日期的正确计算值(请参阅下面的组),但是当我尝试用它创建一个新列()时,我得到了NaN。因此,我正在尝试在数据框中使用Data3所有日期的总和创建一个新列,并将其应用于每个日期行。例如,2015-05-08位于2行中(总计为),在这个新列中,我希望两行中都具有55。 问题答案: 你要使用此方法将返回索引与df对齐的,然后可以将其添加为新

  • 我的问题是如何创建一个新列,它是DPLYR中一些特定列(根据它们的名称选择)的总和。例如,使用iris dataset,我创建了一个名为Petal的新列,它是Petal.Length和Petal.Width的总和。