【问题标题】:Transporting data to create a new data frame to re-structure the data frame传输数据以创建新数据框以重新构建数据框
【发布时间】:2019-05-16 07:31:54
【问题描述】:

我有一个 csv 文件,其中包含沿行的数据。 我想通过将所有行传输到列来创建一个数据框。我提供了以下示例数据框,它复制了 csv 中的数据。

data = pd.DataFrame()
data ['Name'] = ['A','B','C']
data ['Home'] = ['Z','Y','X']
data ['1-0'] = [2.2,3.1,3]
data['2-0'] = [1.5,5,8]
data ['2-1'] = [5,2,3]
data ['HW'] = [1.2,3.2,4]

我想将列 '1-0','2-0','2-1' 转换为新数据框的列,并将其对应的数据转换为新列 Score。 第一列 ** Name** 将用作新列,但所有分数都重复。

以下是预期的输出。

在新的数据框中,第一列 Name 中的元素将被复制。第二列 Score 中的元素是旧数据框中的一些列名称。 HW 等其余列将与名称列相同。

我可以知道如何转换它吗? 非常感谢您的建议。 谢谢。 泽普。

【问题讨论】:

    标签: python pandas dataframe transform transport


    【解决方案1】:

    试试melt:

    data.melt(['Name','Home','HW']).sort_values('Name')
    

    输出:

      Name Home   HW variable  value
    0    A    Z  1.2      1-0    2.2
    3    A    Z  1.2      2-0    1.5
    6    A    Z  1.2      2-1    5.0
    1    B    Y  3.2      1-0    3.1
    4    B    Y  3.2      2-0    5.0
    7    B    Y  3.2      2-1    2.0
    2    C    X  4.0      1-0    3.0
    5    C    X  4.0      2-0    8.0
    8    C    X  4.0      2-1    3.0
    

    另外,您可以使用set_index 和stack:

    data.set_index(['Name','Home','HW']).stack().reset_index()
    

    输出:

      Name Home   HW variable  value
    0    A    Z  1.2      1-0    2.2
    3    A    Z  1.2      2-0    1.5
    6    A    Z  1.2      2-1    5.0
    1    B    Y  3.2      1-0    3.1
    4    B    Y  3.2      2-0    5.0
    7    B    Y  3.2      2-1    2.0
    2    C    X  4.0      1-0    3.0
    5    C    X  4.0      2-0    8.0
    8    C    X  4.0      2-1    3.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2022-07-31
      • 2017-10-01
      • 2021-09-08
      • 2023-03-18
      相关资源
      最近更新 更多