使用python-panda,如何将数据集合并在一起并创建具有唯一修饰符的列



这是我正在使用的当前数据集。

df在三个独立的列中包含KnnKssKtt

我一直想不出如何将这三个列合并为一列,并创建一个有标签的列。

这是我目前拥有的,但我有

df_CohBeh = pd.concat([pd.DataFrame(Knn), 
pd.DataFrame(Kss), 
pd.DataFrame(Ktt)], 
keys=['Knn', 'Kss', 'Ktt'], 
ignore_index=True)

看起来像这样:

display(df_CohBeh)
Knn  Kss        Ktt
0    24.579131  NaN        NaN
1    21.673524  NaN        NaN
2    25.785409  NaN        NaN
3    20.686215  NaN        NaN
4    21.504863  NaN        NaN
..         ...  ...        ...
106        NaN  NaN  27.615440
107        NaN  NaN  27.636029
108        NaN  NaN  26.215347
109        NaN  NaN  27.626850
110        NaN  NaN  25.473380

这本质上是在过滤它们,但我宁愿有一个带字符串的单列,可以用来在同一个seaborn图"Knn""Kss""Ktt"上绘制。查看各种分布。

我不知道如何创建一个列来标记label列中的Knn值。

如果df看起来像:

>>> df
Knn        Kss        Ktt
0   96.054660  72.301166  15.355594
1   36.221933  72.646999  41.670382
2   96.503307  78.597493  71.959442
3   53.867432  17.315678  35.006592
4   43.014227  75.122762  83.666844
5   63.301808  72.514763  64.597765
6    0.201688   1.069586  98.816202
7   48.558265  87.660352   9.140665
8   64.353999  43.534200  15.202242
9   41.260903  24.128533  25.963022
10  63.571747  17.474933  47.093538
11  91.006290  90.834753  37.672980
12  61.960163  87.308155  64.698762
13  87.403750  86.402637  78.946980
14  22.238364  88.394919  81.935868
15  56.356764  80.575804  72.925204
16  30.431063   4.466978  32.257898
17  21.403800  46.752591  59.831690
18  57.330671  14.172341  64.764542
19  54.163311  66.037043   0.822948

尝试df.melt

将三者合并为一列,并有一个带标签的列。

variable      value
0       Knn  96.054660
1       Knn  36.221933
2       Knn  96.503307
3       Knn  53.867432
4       Knn  43.014227
5       Knn  63.301808
...
20      Kss  72.301166
21      Kss  72.646999
22      Kss  78.597493
23      Kss  17.315678
24      Kss  75.122762
25      Kss  72.514763
...
40      Ktt  15.355594
41      Ktt  41.670382
42      Ktt  71.959442
43      Ktt  35.006592
44      Ktt  83.666844
45      Ktt  64.597765
...

您应该使用pandasSeries

knn = pd.DataFram({...})
kss = pd.DataFram({...})
ktt = pd.DataFram({...})
l = knn.values.flatten() + kss.values.flatten() + ktt.values.flatten()
s = pd.Series(l, name="Knn")

最新更新