分组并聚合具有两列值条件的数据框
Posted
技术标签:
【中文标题】分组并聚合具有两列值条件的数据框【英文标题】:Group-by and aggregate a data frame with conditions of values from two column 【发布时间】:2020-01-19 18:07:43 【问题描述】:说,我有以下数据框,
df.head()
col1 col2 col3 start end gs
chr1 HAS GEN 11869 14409 DDX
chr1 HAS TRANS 11869 14409 Tp1 psg
chr1 HAS EX 11869 12227 Tp gn
chr1 HAS GEN 12613 12721 FXBZ
chr1 HAS EX 13221 14409 Tpghj
chr1 HAS EX 12010 12057 Tpghj
我感兴趣的专栏是col3
和gs
。我有两个条件,
col3
应该等于 EX
如果col3
等于GEN
,则使用列gs
中的值
如果col3 =="GEN"
,我总是希望gs
列的值为gs
列
最后,这就是我的目标。
df_converted.head()
gs chr strt end ex_start ex_end
DDX chr1 11869 14409 11869, 12613,13221 12227,12721,14409
FXBZ chr1 12613 12721 13221,12010 14409,12057
这是我尝试过的,
df.loc[((df.col3 == "EX") | (df.col3 == "GEN")), ['gs', 'start', 'end']].groupby(['gs']).agg(
lambda x: ','.join([str(y) for y in x]))
非常感谢任何建议/帮助!
【问题讨论】:
【参考方案1】:你可以这样做:
df1=df.loc[df['col3'].eq('GEN'),['gs','col1','start','end']].reset_index(drop=True)
df2=pd.DataFrame()
dex=df.loc[df['col3'].eq('EX'),['start','end']]
index=df[df['col3'].eq('GEN')].index.tolist()
v1=dex[dex.index>index[1]].T.values.tolist()
v2=dex[dex.index>index[0]].T.values.tolist()
df2['ex_start']=[v2[0],v1[0]]
df2['ex_end']=[v2[1],v1[1]]
print(pd.concat([df1,df2],axis=1))
gs col1 start end ex_start ex_end
0 DDX chr1 11869 14409 [11869, 13221, 12010] [12227, 14409, 12057]
1 FXBZ chr1 12613 12721 [13221, 12010] [14409, 12057]
【讨论】:
感谢您的解决方案!我不确定你为什么使用df_converted
变量,它是我想要的输出。从问题以上是关于分组并聚合具有两列值条件的数据框的主要内容,如果未能解决你的问题,请参考以下文章