使用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