繁体   English   中英

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

[英]How do I convert my 2D numpy array to a pandas dataframe with given categories?

我有一个名为“值”的数组,其中包含2列来自10个人的平均反应时间数据。 第一列是针对在条件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    Individual
451.75   A            1
488.56   B            1
488.55   A            2

...等等

这应该工作

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

melt

您可以使用pd.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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM