我在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
谢谢
答案 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