根据多列的值将新列添加到数据框中

用户名

我有一个数据框,其标题如下:

df.head()
Out[660]:
Samples variable    value   Type
0   PE01I   267N12.3_Beta   0.066517    Beta
1   PE01R   R267N12.3_Beta  0.061617    Beta
2   PE02I   267N12.3_Beta   0.071013    Beta
3   PE02R   267N12.3_Beta   0.056623    Beta
4   PE03I   267N12.3_Beta   0.071633    Beta
5   PE01I   267N12.3_FPKM   0.000000    FPKM
6   PE01R   267N12.3_FPKM   0.003430    FPKM
7   PE02I   267N12.3_FPKM   0.272144    FPKM
8   PE02R   267N12.3_FPKM   0.005753    FPKM
9   PE03I   267N12.3_FPKM   0.078708    FPKM

我想通过基于“值”列中的相应值使用“类型”列中的标题,添加标题名称为Beta和FPKM的新列。到目前为止,我是按照单线尝试的,

df['Beta'] = df['Type'].map(lambda x: df.value if x == "Beta" else "FPKM")

它给sme以下输出,

Samples variable    value   Type                      Beta
0   PE01I   267N12.3_Beta   0.066517    Beta        0 0.066517 1 0.061617 2 0.07...
1   PE01R   267N12.3_Beta   0.061617    Beta    0 0.066517 1 0.061617 2 0.07...
2   PE02I   267N12.3_Beta   0.071013    Beta    0 0.066517 1 0.061617 2 0.07...
3   PE02R   267N12.3_Beta   0.056623    Beta    0 0.066517 1 0.061617 2 0.07...
4   PE03I   267N12.3_Beta   0.071633    Beta    0 0.066517 1 0.061617 2 0.07...

Beta列具有三个值,并且所有列都在重复。我的目标是要有一个看起来像的数据框,

Samples variable    Beta    FPKM
PE01I   267N12.3_Beta   0.066517    0
PE01R   267N12.3_Beta   0.061617    0.00343
PE02I   267N12.3_Beta   0.071013    0.272144
PE02R   267N12.3_Beta   0.056623    0.005753
PE03I   267N12.3_Beta   0.071633    0.078708

任何帮助都将非常棒..谢谢

耶斯列尔

我认为您需要unstack

df1 = df.set_index(['Samples','Type']).unstack()
print (df1)
               variable                    value          
Type               Beta           FPKM      Beta      FPKM
Samples                                                   
PE01I     267N12.3_Beta  267N12.3_FPKM  0.066517  0.000000
PE01R    R267N12.3_Beta  267N12.3_FPKM  0.061617  0.003430
PE02I     267N12.3_Beta  267N12.3_FPKM  0.071013  0.272144
PE02R     267N12.3_Beta  267N12.3_FPKM  0.056623  0.005753
PE03I     267N12.3_Beta  267N12.3_FPKM  0.071633  0.078708

#remove Multiindex in columns
df1.columns = ['_'.join(col) for col in df1.columns]
df1.reset_index(inplace=True)
print (df1)
  Samples   variable_Beta  variable_FPKM  value_Beta  value_FPKM
0   PE01I   267N12.3_Beta  267N12.3_FPKM    0.066517    0.000000
1   PE01R  R267N12.3_Beta  267N12.3_FPKM    0.061617    0.003430
2   PE02I   267N12.3_Beta  267N12.3_FPKM    0.071013    0.272144
3   PE02R   267N12.3_Beta  267N12.3_FPKM    0.056623    0.005753
4   PE03I   267N12.3_Beta  267N12.3_FPKM    0.071633    0.078708

#if need remove column
print (df1.drop('variable_FPKM', axis=1))
  Samples   variable_Beta  value_Beta  value_FPKM
0   PE01I   267N12.3_Beta    0.066517    0.000000
1   PE01R  R267N12.3_Beta    0.061617    0.003430
2   PE02I   267N12.3_Beta    0.071013    0.272144
3   PE02R   267N12.3_Beta    0.056623    0.005753
4   PE03I   267N12.3_Beta    0.071633    0.078708

通过评论编辑:

如果出现错误:

ValueError:索引包含重复的条目,无法重塑

这意味着您有重复的值,index并且有必要进行聚集。

您需要,pivot_table并且如果aggfunc是np.sumnp.mean(使用数字),则将忽略字符串列,并且''.join仅对字符串值和数字起作用的函数将被忽略。

两次以不同的方式调用函数aggfunc,然后使用concat

import pandas as pd

df = pd.DataFrame({'Type': {0: 'Beta', 1: 'Beta', 2: 'Beta', 3: 'Beta', 4: 'Beta', 5: 'FPKM', 6: 'FPKM', 7: 'FPKM', 8: 'FPKM', 9: 'FPKM'}, 'value': {0: 0.066516999999999993, 1: 0.061616999999999998, 2: 0.071012999999999993, 3: 0.056623, 4: 0.071633000000000002, 5: 0.0, 6: 0.0034299999999999999, 7: 0.272144, 8: 0.0057530000000000003, 9: 0.078708}, 'variable': {0: '267N12.3_Beta', 1: 'R267N12.3_Beta', 2: '267N12.3_Beta', 3: '267N12.3_Beta', 4: '267N12.3_Beta', 5: '267N12.3_FPKM', 6: '267N12.3_FPKM', 7: '267N12.3_FPKM', 8: '267N12.3_FPKM', 9: '267N12.3_FPKM'}, 'Samples': {0: 'PE01I', 1: 'PE01I', 2: 'PE02I', 3: 'PE02R', 4: 'PE03I', 5: 'PE01I', 6: 'PE01R', 7: 'PE02I', 8: 'PE02R', 9: 'PE03I'}})

#changed value in second row in column Samples
print (df)
  Samples  Type     value        variable
0   PE01I  Beta  0.066517   267N12.3_Beta
1   PE01I  Beta  0.061617  R267N12.3_Beta
2   PE02I  Beta  0.071013   267N12.3_Beta
3   PE02R  Beta  0.056623   267N12.3_Beta
4   PE03I  Beta  0.071633   267N12.3_Beta
5   PE01I  FPKM  0.000000   267N12.3_FPKM
6   PE01R  FPKM  0.003430   267N12.3_FPKM
7   PE02I  FPKM  0.272144   267N12.3_FPKM
8   PE02R  FPKM  0.005753   267N12.3_FPKM
9   PE03I  FPKM  0.078708   267N12.3_FPKM
df1 = df.pivot_table(index='Samples', columns=['Type'], aggfunc=','.join)
print (df1)
                             variable               
Type                             Beta           FPKM
Samples                                             
PE01I    267N12.3_Beta,R267N12.3_Beta  267N12.3_FPKM
PE01R                            None  267N12.3_FPKM
PE02I                   267N12.3_Beta  267N12.3_FPKM
PE02R                   267N12.3_Beta  267N12.3_FPKM
PE03I                   267N12.3_Beta  267N12.3_FPKM

df2 = df.pivot_table(index='Samples', columns=['Type'], aggfunc=np.mean)
print (df2)
            value          
Type         Beta      FPKM
Samples                    
PE01I    0.064067  0.000000
PE01R         NaN  0.003430
PE02I    0.071013  0.272144
PE02R    0.056623  0.005753
PE03I    0.071633  0.078708

df3 = pd.concat([df1, df2], axis=1)
df3.columns = ['_'.join(col) for col in df3.columns]
df3.reset_index(inplace=True)
print (df3)
  Samples                 variable_Beta  variable_FPKM  value_Beta  value_FPKM
0   PE01I  267N12.3_Beta,R267N12.3_Beta  267N12.3_FPKM    0.064067    0.000000
1   PE01R                          None  267N12.3_FPKM         NaN    0.003430
2   PE02I                 267N12.3_Beta  267N12.3_FPKM    0.071013    0.272144
3   PE02R                 267N12.3_Beta  267N12.3_FPKM    0.056623    0.005753
4   PE03I                 267N12.3_Beta  267N12.3_FPKM    0.071633    0.078708

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据R中其他数据框中是否存在值,将新值添加到新列中

来自分类Dev

根据其他列值将新列添加到数据框

来自分类Dev

根据单个列中的值将值添加到数据框列

来自分类Dev

根据其他列中的值将列添加到数据框

来自分类Dev

根据特定的行值将列添加到数据框中(2)

来自分类Dev

将列表中具有零值的多列添加到Pandas数据框

来自分类Dev

熊猫在关联的字符串值处将列添加到新数据框中?

来自分类Dev

根据dplyr中多个数据框中的值将列添加到数据框中

来自分类Dev

根据另一列中的值将值添加到熊猫数据框的一列中

来自分类Dev

根据另一列中的值将值添加到熊猫数据框的一列中

来自分类Dev

根据另一个数据框中的值将列添加到数据框中

来自分类Dev

根据python中的列数据类型将列添加到显示布尔值的数据框

来自分类Dev

根据现有列与pyspark的交互将新列添加到数据框

来自分类Dev

根据另一行中另一列的值将列添加到数据框中

来自分类Dev

根据两个现有列中的值将第三列添加到数据框中

来自分类Dev

根据现有列中的值将值添加到Pandas中的新列中

来自分类Dev

大熊猫-根据多行中的值将汇总列数据的行添加到数据框中

来自分类Dev

根据其他列的值将列添加到数据框

来自分类Dev

根据现有列的相邻值将列添加到Pandas数据框

来自分类Dev

Dplyr根据分组数据的特定值将列添加到数据框

来自分类Dev

根据条件将列添加到数据框

来自分类Dev

根据单独对象列表中的值将列添加到列表中的每个数据框

来自分类Dev

根据其他列中的值将新列添加到矩阵中

来自分类Dev

将列标题添加到新的熊猫数据框

来自分类Dev

将新列数组添加到Pandas数据框

来自分类Dev

将向量作为新列添加到数据框

来自分类Dev

根据其他列中的值将新列添加到df

来自分类Dev

根据列中的值将新列添加到临时表

来自分类Dev

R根据行值将索引列添加到数据框

Related 相关文章

  1. 1

    根据R中其他数据框中是否存在值,将新值添加到新列中

  2. 2

    根据其他列值将新列添加到数据框

  3. 3

    根据单个列中的值将值添加到数据框列

  4. 4

    根据其他列中的值将列添加到数据框

  5. 5

    根据特定的行值将列添加到数据框中(2)

  6. 6

    将列表中具有零值的多列添加到Pandas数据框

  7. 7

    熊猫在关联的字符串值处将列添加到新数据框中?

  8. 8

    根据dplyr中多个数据框中的值将列添加到数据框中

  9. 9

    根据另一列中的值将值添加到熊猫数据框的一列中

  10. 10

    根据另一列中的值将值添加到熊猫数据框的一列中

  11. 11

    根据另一个数据框中的值将列添加到数据框中

  12. 12

    根据python中的列数据类型将列添加到显示布尔值的数据框

  13. 13

    根据现有列与pyspark的交互将新列添加到数据框

  14. 14

    根据另一行中另一列的值将列添加到数据框中

  15. 15

    根据两个现有列中的值将第三列添加到数据框中

  16. 16

    根据现有列中的值将值添加到Pandas中的新列中

  17. 17

    大熊猫-根据多行中的值将汇总列数据的行添加到数据框中

  18. 18

    根据其他列的值将列添加到数据框

  19. 19

    根据现有列的相邻值将列添加到Pandas数据框

  20. 20

    Dplyr根据分组数据的特定值将列添加到数据框

  21. 21

    根据条件将列添加到数据框

  22. 22

    根据单独对象列表中的值将列添加到列表中的每个数据框

  23. 23

    根据其他列中的值将新列添加到矩阵中

  24. 24

    将列标题添加到新的熊猫数据框

  25. 25

    将新列数组添加到Pandas数据框

  26. 26

    将向量作为新列添加到数据框

  27. 27

    根据其他列中的值将新列添加到df

  28. 28

    根据列中的值将新列添加到临时表

  29. 29

    R根据行值将索引列添加到数据框

热门标签

归档