【问题标题】:How do I count values in pandas我如何计算熊猫中的值
【发布时间】:2016-06-28 19:14:45
【问题描述】:

如果我没有任何意义,我深表歉意,英语不是我的母语,我只接触 python 和 pandas 一周。

所以,我有一个非常长的转录因子 (TF) 数据框和一长串必需基因,而我目前所做的是确定受 TF 调节的基因是必需基因还是不是。像这样:

In:
df2 = regulon.copy()
lista_genes = (genes['Esenciales'].values.tolist())
df2['Esencialidad'] = (pd.DataFrame(regulon['Target'].isin(lista_genes)))
df2[['Esencialidad']] = df2[['Esencialidad']].astype(str)
df2.ix[df2.Esencialidad == 'True' , 'Esencialidad'] = 'Esencial'
df2.ix[df2.Esencialidad == 'False' , 'Esencialidad'] = 'No esencial'
df2.to_excel("salida2.xlsx", index = False)
df2
Out:
    TF    Target    Regulation  Score   Esencialidad
0   AccB    accB          -     null    Esencial
1   AccB    accC          -     null    Esencial
2   AcrR    acrA          -     Weak    No esencial
3   AcrR    acrB          -     Weak    No esencial
4   AcrR    acrR          -     Weak    No esencial
5   AcrR    marA          -     Strong  No esencial
6   AcrR    marB          -     Strong  No esencial
7   AcrR    marR          -     Strong  No esencial
8   AcrR    micF          -     Weak    No esencial
9   AcrR    soxR          -     Strong  No esencial
10  AcrR    soxS          -     Strong  No esencial
11  Ada     alkB          -     Strong  No esencial
12  Ada     alkB          +     Strong  No esencial

接下来我做的是确定有多少基因被 TF 调控。像这样:

In: 
genes_regulados = regulon['TF'].value_counts()
TF = pd.DataFrame(genes_regulados)
TF.reset_index(inplace=True)
TF.rename(columns={'index': 'TF', 'TF': 'Genes_regulados'}, inplace=True)
TF = TF.sort_values('TF').reset_index(drop=True)
TF['Esenciales'] = (pd.DataFrame(regulon['Target'].isin(lista_genes)))
TF
Out:

    TF  Genes_Regulados
0   AccB    2
1   AcrR    9
2   Ada     6
3   AdiY    8
4   AgaR    11
5   AidB    1
6   AlaS    1
7   AllR    9

我现在要做的是在一个新列中确定给定 TF 的那些受调控基因中有多少是必需的,而在另一列中有多少不是必需的。

我需要你的帮助。我被卡住了,我不知道该怎么做。

我正在寻找的输出是这样的:

TF  Genes Regulados Esenciales  No Esenciales
AcrR         4         0           4           
Ada          6         0           6          
AdiY         8         0           8             
AgaR        11         0          11          
AidB         1         0           1    
AlaS         1         1           0    
AllR         9         0           9    
AllS         3         0           3    
AlsR         6         0           6    
AppY        10         0          10    
AraC        19         6          13    

更新

感谢 JBr,我得到了我所需要的。现在我想知道是否有办法让它变得更复杂,并得到多少必需基因具有正调控,以及多少必需基因对给定的 TF 和负调控。

我正在寻找的输出是这样的:

TF  Genes_regulados Esenciales  No Esenciales Esenciales_positivos Esenciales_negativos
AcrR         4         0           4                   0                   0
Ada          6         0           6                   0                   0
AdiY         8         0           8                   0                   0
AgaR        11         0          11                   0                   0
AidB         1         0           1                   0                   0
AlaS         1         1           0                   0                   1
AllR         9         0           9                   0                   0
AllS         3         0           3                   0                   0
AlsR         6         0           6                   0                   0
AppY        10         0          10                   0                   0
AraC        19         6          13                   4                   2

谢谢。

【问题讨论】:

  • 我认为您可以取消删除您的问题或更好地创建新的 - stackoverflow.com/questions/38209757/…。你被否决了(不是我),因为没有你的代码,也没有想要的输出。顺便说一句,我想我现在有适合你的解决方案,但我需要将它与你想要的输出进行比较..
  • 如果可能的话你也可以解释一下。

标签: python list pandas


【解决方案1】:

apply是你的朋友

def count_tfs_essential(tf_val, df2, esencial_val):
    '''returns count of rows in df2 having specific tf_val and esencial_val'''
    df2_con_tf_val = df2[(df2["TF"] == tf_val)]
    df2_con_tf_val_y_essencial = df2_con_tf_val[df2_con_tf_val["Esencialidad"] == esencial_val]

    count = len(df2_con_tf_val_y_essencial.index)

    return count

TF["Esenciales"] = TF["TF"].apply(lambda tf_val: count_tfs_essential (tf_val, df2, "Esencial"))
TF["No Esenciales"] = TF["TF"].apply(lambda tf_val: count_tfs_essential (tf_val, df2, "No esencial"))

* 所需的 df:*

     TF  Genes_Regulados  Esenciales  No Esenciales
0  AccB                2           2              0
1  AcrR                9           0              9
2   Ada                6           0              2
3  AdiY                8           0              0
4  AgaR               11           0              0
5  AidB                1           0              0
6  Alas                1           0              0
7  AllR                9           0              0

【讨论】:

  • 这就像一个魅力!正是我想要的。虽然我不明白这是如何工作的。我对 python 和 pandas 很陌生。你能解释一下这段代码在做什么吗?谢谢;)
  • 太棒了!很高兴它有效。你特别不明白哪一部分?尝试打印出中间步骤,看看是否有帮助。
  • 感谢 JBr!我必须阅读很多内容才能更好地理解 lambda、def 和 return 的工作原理。现在我想知道是否有可能让它变得更复杂,并找出有多少必需基因对给定的 TF 具有正调节作用,以及有多少必需基因具有负调节作用。另外,你能给我指一本好书或指南来更好地学习python吗?
  • 熊猫文档很好。将带有所需df的问题发布为新问题,我会尝试看看
  • 好的。我刚刚更新了我的问题。非常感谢!同时,我会尝试自己弄清楚
猜你喜欢
  • 2019-12-13
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 2022-11-03
  • 2013-04-11
  • 2014-02-13
  • 2020-02-04
  • 2018-12-12
相关资源
最近更新 更多