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

2024-09-25 12:25:10 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法为给定的列选择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'

这两个步骤将导致如下结果:

>> 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'

Tags: 数据l1列表range标签概率labeldf1
2条回答

你必须先定义箱子和标签-

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

然后使用^{}-

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

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

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)

对于标签和箱子,可以使用pandas.cut。请注意,在这个函数中不能使用单例作为bin。因此,您必须在以后创建它。你可以这样做

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

    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)

然后我创建新列并用标签l1填充NaN值,该标签对应于单例[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

相关问题 更多 >