使用python pandas将字符串字段聚合到一个列表中

时间:2014-10-01 23:14:50

标签: python pandas grouping aggregate

我在pandas中有以下数据框:

>>> df1[1:15]
      gene      beta
1    PALMD       NaN
2    PALMD       NaN
3    FRRS1  1.966503
4      AGL       NaN
5      AGL -4.082453
6      AGL  2.840288
7      AGL       NaN
8      AGL -4.909043
9      AGL       NaN
10     AGL  3.275433
11   SASS6       NaN
12   SASS6 -3.239315
13  TRMT13  3.434759
14  TRMT13  4.282222

我想创建一个变量,它将指示每个基因的所有β值是否为(1)该基因的所有阳性beta,(2)所有负β,或(3)混合。除非它们是给定基因的唯一类型,否则我将丢弃NaN。这是目标:

>>> df1[1:15]
      gene   Direction
1    PALMD         NaN
2    FRRS1         Pos
3      AGL         Mix
4    SASS6         Neg
5   TRMT13         Pos

我试图通过基因聚合,但是我得到了一个错误,可能是由于NaN。如果可能的话,我想将输出保留为pandas数据框,因为我将来必须将其合并到另一个df

>>> df1g = df1.groupby("gene")
>>> df1ga = df1g.agg(np.concatenate)
KeyError: 0L

谢谢

1 个答案:

答案 0 :(得分:2)

我写了一个小标签功能:

def label(ser):
    ser = ser.dropna()
    if ser.empty:
        return np.nan
    if (ser >= 0).all():
        return "Pos"
    if (ser < 0).all():
        return "Neg"
    return "Mix"

然后将其传递给groupby.agg,以便更容易指定名称:

>>> labelled = df.groupby("gene")["beta"].agg({"Direction": label}).reset_index()
>>> labelled
     gene Direction
0     AGL       Mix
1   FRRS1       Pos
2   PALMD       NaN
3   SASS6       Neg
4  TRMT13       Pos