我在这里使用这个问题的上下文和代码:Aggregate all dataframe row pair combinations using pandas
import pandas
import itertools
mygenes=['ABC1', 'ABC2', 'ABC3', 'ABC4']
df = pandas.DataFrame({'Gene' : ['ABC1', 'ABC2', 'ABC3', 'ABC4','ABC5'],
'case1' : [0,1,1,0,0],
'case2' : [1,1,1,0,1],
'control1':[0,0,1,1,1],
'control2':[1,0,0,1,0] })
>>> df
Gene case1 case2 control1 control2
0 ABC1 0 1 0 1
1 ABC2 1 1 0 0
2 ABC3 1 1 1 0
3 ABC4 0 0 1 1
4 ABC5 0 1 1 0
下面的解决方案对行求和,但是,在我的情况下,我需要差值。
>>> df = df.set_index("Gene")
>>> cc = list(combinations(mygenes,2))
>>> out = pd.DataFrame([df.loc[c,:].sum() for c in cc], index=cc)
>>> out
case1 case2 control1 control2
(ABC1, ABC2) 1 2 0 1
(ABC1, ABC3) 1 2 1 1
(ABC1, ABC4) 0 1 1 2
(ABC2, ABC3) 2 2 1 0
(ABC2, ABC4) 1 1 1 1
(ABC3, ABC4) 1 1 2 1
所以在我的例子中,(ABC1,ABC2)会产生[-1,0,0,1]
不幸的是,使用. diff()而不是. sum()会导致以下错误消息:
- 数值错误:必须传递二维输入。形状=(10,2,8)**
2条答案
按热度按时间8ljdwjyq1#
了解一下
.sum()
和.diff()
的功能可能会有所帮助.sum()
生成一个系列.diff()
生成一个 Dataframe您可以将句点
-1
与diff一起使用,然后为生成的DataFrame的第一行建立索引一个二个一个一个
nxowjjhe2#
另一种可能的解决方案:
输出: