簡體   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