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

使用python将字符串字段聚合到列表中,python,pandas,grouping,aggregate,Python,Pandas,Grouping,Aggregate,我有以下熊猫数据框: >>> 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

我有以下熊猫数据框:

>>> 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)该基因的所有正β值,(2)所有负β值,还是(3)混合β值。我将丢弃NaN,除非它们是特定基因的唯一类型。这就是目标:

>>> df1[1:15]
      gene   Direction
1    PALMD         NaN
2    FRRS1         Pos
3      AGL         Mix
4    SASS6         Neg
5   TRMT13         Pos
我试图通过基因聚合,但我得到了一个错误,可能是由于NaN。如果可能的话,我希望将输出保持为一个数据帧,因为我将不得不在将来将其合并到另一个df

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

谢谢

我想写一个小标签函数:

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"

dsm很好的回答。这本词典的目的是什么?是要在生成的列上获取标签吗?是的
df.groupby(“gene”)[“beta”].agg(label).reset_index(name=“Direction”)
也会起作用,但这对我来说总是有点不可思议。我在实现代码时看到了这个错误:
AttributeError:'Series'对象没有属性“empty”
。这可能是版本问题吗?通过将
if ser.empty:
更改为
if len(ser)==0:
谢谢!
>>> 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