pandas 以特定方式在Python中扫描表

2wnc66cl  于 2022-11-20  发布在  Python
关注(0)|答案(1)|浏览(105)

我有表如:

  1. Groups SP1 SP2 SP3 SP4_1 SP4_2 SP5_1 SP5_2
  2. G1 3 4 NA 2 4 2 1
  3. G2 NA 1 NA 3 NA NA NA
  4. G3 1 2 NA NA NA 8 NA
  5. G4 4 6 NA NA NA NA NA
  6. G5 8 9 NA NA NA NA 2

我想把这张table整理成:

  1. G1 G2 G3 G4 G5
  2. SP1 SP1-3 NA SP1-1 SP1-4 SP1-8
  3. SP2 SP2-4 SP2-1 SP2-2 SP2-6 SP2-9
  4. SP3 NA NA NA NA NA
  5. SP4 SP4_1-2;SP4_2-4 SP4_1-3 NA NA NA
  6. SP5 SP5_1-2;SP5_2-1 NA SP5_1-8 NA SP5_2-2

让我解释一下:
让我们以G1为例来解释,首先创建一个新列G1,并将所有SPn作为行添加:

  1. G1
  2. SP1
  3. SP2
  4. SP3
  5. SP4
  6. SP5

然后,在G1中,SP1有一个值,即3,然后添加一行SP1-3

  1. G1
  2. SP1 SP1-3
  3. SP2
  4. SP3
  5. SP4
  6. SP5

SP2有一个值,即4,然后添加一行SP1-4

  1. G1
  2. SP1 SP1-3
  3. SP2 SP1-4
  4. SP3
  5. SP4
  6. SP5

我没有SP3的值

  1. G1
  2. SP1 SP1-3
  3. SP2 SP1-4
  4. SP3 NA
  5. SP4
  6. SP5

我有两个SP 4的值,在SP4_1中是2,在SP4_2中是4,然后我用分号“将它们合并;“,并添加一行SP4_1-2;SP4_2-4

  1. G1
  2. SP1 SP1-3
  3. SP2 SP1-4
  4. SP3 NA
  5. SP4 SP4_1-2;SP4_2-4
  6. SP5

最后我有两个SP 5的值,在SP5_1中是2,在SP5_2中是1,然后我用分号将它们合并“;“,并添加一行SP5_1-2;SP5_2-1

  1. G1
  2. SP1 SP1-3
  3. SP2 SP1-4
  4. SP3 NA
  5. SP4 SP4_1-2;SP4_2-4
  6. SP5 SP5_1-2;SP5_2-1

其他组依此类推。
有人知道如何使用python吗?

jdzmm42g

jdzmm42g1#

这是我的尝试,看起来不太好,但似乎工作:

  1. t = df.melt('Groups')
  2. t['val'] = t['variable'].str.cat(t['value'].dropna().astype(str),sep='-')
  3. t['col'] = t['variable'].str[:3]
  4. def f(x):
  5. return x.dropna().str.cat(sep=';') or pd.NA
  6. res = t.pivot_table('val','col','Groups',f)
  7. print(res)
  8. '''
  9. Groups G1 G2 G3 G4 G5
  10. col
  11. SP1 SP1-3.0 NaN SP1-1.0 SP1-4.0 SP1-8.0
  12. SP2 SP2-4.0 SP2-1.0 SP2-2.0 SP2-6.0 SP2-9.0
  13. SP4 SP4_1-2.0;SP4_2-4.0 SP4_1-3.0 NaN NaN NaN
  14. SP5 SP5_1-2.0;SP5_2-1.0 NaN SP5_1-8.0 NaN SP5_2-2.0
展开查看全部

相关问题