在特定列中切片基于不同范围值的多个数据框,并将其分类在新列中

时间:2018-08-27 09:28:52

标签: python pandas dataframe

是否可以为给定的列选择5个特定范围内的值,并针对每个不同的数据框在新列中应用标签?

我的意思是,我有一个数据帧列表。所有数据框都有2列,并且共享相同的第一列,但第二列不同(标题和值)。例如:

>> df1
   GeneID   A
     1     0.3 
     2     0.0
     3     143
     4      9
     5     0.6

>> df2
   GeneID   B
     1     0.2 
     2     0.3
     3     0.1
     4     0.7
     5     0.4

  ....

我想:

  1. 对于列表中的每个数据帧,执行计算,得出该值出现在5个不同范围中的1个范围内的可能性。用这些值附加一个新列;

  2. 对于列表中的每个数据框,将相应的范围标签附加到另一个新列中。

范围是

*Range_Values* -> *Range_Label*

   **[0]**     ->   'l1'

  **]0,1]**    ->   'l2'

 **]1,10]**    ->   'l3'

**]10,100]**   ->   'l4'

  **>100**        'l5'

这2个步骤的方法会导致类似的情况:

>> list_dfs[df1]
   GeneID    A    Prob_val     Exp_prof
      1     0.3     0.4         'l2'
      2     0.0     0.2         'l1'
      3     143     0.2         'l5'
      4      9      0.2         'l3'
      5     0.6     0.4         'l2'

2 个答案:

答案 0 :(得分:1)

您必须首先定义垃圾箱和标签-

bins = [0, 1, 10, 100, float("inf")]
labels = ['l1', 'l2', 'l3', 'l4', 'l5']

然后使用pd.cut()-

pd.cut(df1['A'], bins, right=False)

labels中有一个pd.cut()参数,可用于获取标签-

pd.cut(df1['A'], bins, labels=labels, right=False)

您可以使用生成的bins来计算概率,我将其留给您来做。

您可以循环dfs的其余部分执行此操作,最后将它们分配给列表-

list_dfs = [df1, df2, ...]

如果动态编号为dfs,请使用循环-

框架

for df in dfs:
    df['bins'] = pd.cut(df['A'], bins, right=False)
    df['label'] = pd.cut(df['A'], bins, labels=labels, right=False)

答案 1 :(得分:1)

对于标签和垃圾桶,您可以使用pandas.cut。请注意,您不能在此函数中将单例用作垃圾箱。因此,您之后必须创建它。这是您的操作方法。

首先,我重新创建一个数据框:

    import io
temp = u"""
GeneID    A
      1     0.3
      2     0.0
      3     143
      4      9
      5     0.6"""
foo = pd.read_csv(io.StringIO(temp),delim_whitespace = True)

然后,我创建新列,并用标签NaN填充l1值,该标签对应于单例[0]

foo['Exp_prof'] = pd.cut(foo.A,bins = [0,1,10,100,np.inf],labels = ['l2','l3','l4','l5'])
foo['Exp_prof'] = foo['Exp_prof'].cat.add_categories(['l1'])
foo['Exp_prof'] = foo['Exp_prof'].fillna('l1')

然后我使用这一新列来计算概率:

foo['Prob_val'] = foo.Exp_prof.map((foo.Exp_prof.value_counts()/len(foo)).to_dict())

输出为:

    GeneID  A       Exp_prof    Prob_val
0   1       0.3     l2          0.4
1   2       0.0     l1          0.2
2   3       143.0   l5          0.2
3   4       9.0     l3          0.2
4   5       0.6     l2          0.4