为了账号安全,请及时绑定邮箱和手机立即绑定

如何将我的 2D numpy 数组转换为具有给定类别的 Pandas 数据框?

如何将我的 2D numpy 数组转换为具有给定类别的 Pandas 数据框?

墨色风雨 2021-09-01 19:28:47
我有一个名为“值”的数组,其中包含来自 10 个人的 2 列平均反应时间数据。第一列指的是为条件 A 中的单个个体收集的数据,第二列是为条件 B 中的同一个体收集的数据:array([[451.75      , 488.55555556],   [552.44444444, 590.40740741],   [629.875     , 637.62962963],   [454.66666667, 421.88888889],   [637.16666667, 539.94444444],   [538.83333333, 516.33333333],   [463.83333333, 448.83333333],   [429.2962963 , 497.16666667],   [524.66666667, 458.83333333]])我想使用 seaborn 绘制这些数据,以显示两个条件下每个人的平均值和连接的单个值。将数组“值”转换为 3 列 DataFrame 的最简单方法是什么,其中一列具有所有值,另一列具有将该值区分为条件 A 或条件 B 的标签,以及为每个值提供数字的最后一列个人(即 1-10)?例如,如下:Value    Condition    Individual451.75   A            1488.56   B            1488.55   A            2...等等
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

melt

你可以使用pd.melt:


pd.DataFrame(data, columns=['A','B']).reset_index().melt(id_vars = 'index')\

    .rename(columns={'index':'Individual'})


 Individual variable       value

0            0        A  451.750000

1            1        A  552.444444

2            2        A  629.875000

3            3        A  454.666667

4            4        A  637.166667

5            5        A  538.833333

6            6        A  463.833333

7            7        A  429.296296

8            8        A  524.666667

9            0        B  488.555556

10           1        B  590.407407

11           2        B  637.629630

12           3        B  421.888889

13           4        B  539.944444

14           5        B  516.333333

15           6        B  448.833333

16           7        B  497.166667

17           8        B  458.833333


查看完整回答
反对 回复 2021-09-01
?
富国沪深

TA贡献1790条经验 获得超9个赞

这应该工作


import pandas as pd

import numpy as np

np_array = np.array([[451.75      , 488.55555556],

   [552.44444444, 590.40740741],

   [629.875     , 637.62962963],

   [454.66666667, 421.88888889],

   [637.16666667, 539.94444444],

   [538.83333333, 516.33333333],

   [463.83333333, 448.83333333],

   [429.2962963 , 497.16666667],

   [524.66666667, 458.83333333]])

pd_df = pd.DataFrame(np_array, columns=["A", "B"])

num_individuals = len(pd_df.index)

pd_df = pd_df.melt()

pd_df["INDIVIDUAL"] = [(i)%(num_individuals) + 1 for i in pd_df.index]

pd_df

   variable       value  INDIVIDUAL

0         A  451.750000           1

1         A  552.444444           2

2         A  629.875000           3

3         A  454.666667           4

4         A  637.166667           5

5         A  538.833333           6

6         A  463.833333           7

7         A  429.296296           8

8         A  524.666667           9

9         B  488.555556           1

10        B  590.407407           2

11        B  637.629630           3

12        B  421.888889           4

13        B  539.944444           5

14        B  516.333333           6

15        B  448.833333           7

16        B  497.166667           8

17        B  458.833333           9



查看完整回答
反对 回复 2021-09-01
  • 2 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信