【问题标题】:Transform 2D numpy array to row-column-value pandas DataFrame将 2D numpy 数组转换为行列值 pandas DataFrame
【发布时间】:2018-12-01 06:41:29
【问题描述】:

假设我有一个像这样的二维 numpy 数组:

arr = np.array([[1, 2], [3, 4], [5, 6]])
# array([[1, 2],
#        [3, 4],
#        [5, 6]])

如何将其转换为“长”结构,每个值有一条记录,与行和列索引相关联?在这种情况下,它看起来像:

df = pd.DataFrame({'row': [0, 0, 1, 1, 2, 2],
                  'column': [0, 1, 0, 1, 0, 1],
                  'value': [1, 2, 3, 4, 5, 6]})

melt 只分配列标识符,而不是行:

pd.DataFrame(arr).melt()
#   variable    value
# 0        0        1
# 1        0        3
# 2        0        5
# 3        1        2
# 4        1        4
# 5        1        6

有没有办法附加行标识符?

【问题讨论】:

标签: python pandas numpy


【解决方案1】:

index 传递给idvar:

pd.DataFrame(arr).reset_index().melt('index')
#    index variable  value
# 0      0        0      1
# 1      1        0      3
# 2      2        0      5
# 3      0        1      2
# 4      1        1      4
# 5      2        1      6

你可以重命名:

df = pd.DataFrame(arr).reset_index().melt('index')
df.columns = ['row', 'column', 'value']

【讨论】:

    【解决方案2】:

    melt 如果是列,则可以使用索引:

    arrdf = pd.DataFrame(arr)
    arrdf['row'] = arrdf.index
    arrdf.melt(id_vars='row', var_name='column')
    
    #    row    column  value
    # 0    0         0      1
    # 1    1         0      3
    # 2    2         0      5
    # 3    0         1      2
    # 4    1         1      4
    # 5    2         1      6
    

    【讨论】:

      猜你喜欢
      • 2018-12-27
      • 2021-11-29
      • 2019-08-04
      • 2020-02-10
      • 2018-01-01
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 2019-05-05
      相关资源
      最近更新 更多