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

使用特定列将DataFrame从长到宽[重复]

侯博易
2023-03-14

我得到了一个如下的数据帧(称之为df1):

id    date   value

A1    day1    0.1
A1    day2    0.2
A1    day3   -0.1
A2    day1    0.3
A3    day2    0.2
A3    day4   -0.5

我需要将值转换为矩阵进行计算,因此我认为我需要首先将数据帧转换为此形式(称为df2)(然后转换为numpy数组):

      day1  day2  day3  day4  day5
  A1   0.1   0.2  -0.1   0.0   0.0
  A2   0.3   0.0   0.0   0.0   0.0
  A3   0.0   0.2   0.0  -0.5   0.0 

如果id在某一天没有值,只需将该天的值设置为0(可能所有id都没有完整的日期值)。

我想的是先生成一个空的DataFrame(称其为df3),然后在其中填充df1的数据:

      day1  day2  day3  day4  day5
  A1   0.0   0.0   0.0   0.0   0.0
  A2   0.0   0.0   0.0   0.0   0.0
  A3   0.0   0.0   0.0   0.0   0.0

但我不知道迭代df1的值以匹配df3中的单元格的正确方法(人们说迭代数据帧是个坏主意?),还是有更好的方法(如枢轴或合并)?

共有1个答案

劳高爽
2023-03-14

这应该行得通。

# pivot and reindex to add the missing days
df.pivot(*df).reindex(['day1', 'day2', 'day3', 'day4', 'day5'], axis=1).fillna(0).values

# array([[ 0.1,  0.2, -0.1,  0. ,  0. ],
#        [ 0.3,  0. ,  0. ,  0. ,  0. ],
#        [ 0. ,  0.2,  0. , -0.5,  0. ]])
 类似资料:
  • 问题内容: 我在mysql表中的数据具有长/高格式(如下所述),并希望将其转换为宽格式。我可以只使用sql吗? 用一个例子最容易解释。假设您具有有关M个国家/地区,N个键(例如,键可以是收入,政治领导人,地区,大洲等)的(国家/地区,键,值)信息。 SQL中是否可以使用宽格式的数据来创建新表? //这将为我获取所有键。 1)然后如何使用这些关键元素创建表? 2)然后如何填写表格值? 我很确定我可以

  • 我试图将pandas数据帧从宽到长,但我找不到一个好方法。有没有建议通过熊猫来实现这一点? 预期结果:

  • 我有以下类别的< code>Dataframe列: 如何创建新列并将转换为:

  • 问题内容: 我想使用与列长有关的条件来过滤,这个问题可能很容易,但是我在SO中没有找到任何相关问题。 更具体的,我有一个只有一个,其中,我想过滤使用长度filterer,我拍下面的一个片段。 我阅读了Column的Documentation,但是没有找到任何有用的属性。感谢您的帮助! 问题答案: 在Spark> = 1.5中,您可以使用功能: 在Spark <1.5中,UDF应该可以解决问题: 如

  • 我从一个列中提取数据的子集,基于满足另一个列中的条件。 我可以得到正确的值,但它在pandas.core.frame.DataFrame中。如何将其转换为列表?

  • 问题内容: 我有一个带有4列的pandas DataFrame,我想创建一个 只有 三个列的 新 DataFrame 。这个问题类似于:从数据框中提取特定的列,但对于不是R的熊猫来说。以下代码不起作用,会引发错误,并且肯定不是熊猫的方式。 熊猫人做这件事的方法是什么? 问题答案: 有一种方法可以做到,它实际上看起来类似于R 在这里,您只是从原始数据框中选择所需的列,并为这些列创建变量。如果您想完全