我有这样一个数据帧(其中'ID'是索引的名称):
VAF
ID
chr1-115227855-T-A 0.002491
chr1-115227855-T-C 0.005449
chr1-115227856-C-A 0.000466
chr1-115227856-C-G 0.000311
chr1-115227856-C-T 0.002331
第二个数据帧如下所示:
Chrom Loc WT Var Change ConvChange AO DP VAF IntEx Gene Upstream Downstream Individual
0 chr1 115227855 T C T>C T>C 43 16155 0.00266171 TIII TIIIa NaN NaN 1
1 chr1 115227856 C T C>T C>T 25 16179 0.00154521 TIII TIIIa NaN NaN 1
2 chr1 115227857 C T C>T C>T 20 16178 0.00123625 TIII TIIIa NaN NaN 1
3 chr1 115227858 A T A>T T>A 29 16178 0.00179256 TIII TIIIa NaN NaN 1
4 chr1 115227880 C T C>T C>T 18 16150 0.00111455 TIII TIIIa NaN NaN 1
我想让第二个数据帧看起来像第一个。我尝试过这样设置一个新索引:
df2.set_index(['Chrom','Loc','WT','Var']).VAF
但这只是给了我一个多索引的数据帧。你知道吗
有办法吗?你知道吗
apply
一个format_map
一行
因为它很酷
¯\_(ツ)_/¯
解释
创建一个接受字典并传递其键:值对作为要在格式化字符串中使用的参数。注意,
'Loc'
可以是str
或int
,因为format
/format_map
使用字符串表示。你知道吗通过使用
df.apply
和axis=1
将函数应用于df
的每一行,生成一个新的series对象。在这种情况下,每一行都将作为pandas.Series
传递,并且可以在字典上下文中进行处理。这是format_map
的最佳选择。我将把序列重命名为'ID'
,以匹配OP的输出。你知道吗现在,如果我们在
set_index
中使用pandas.Series
,Pandas会将现有索引与传递序列的索引对齐。。。这很好。你知道吗使用双方括号对列
[['VAF']]
进行切片,以确保保持列等于['VAF']
的数据帧。否则,如果我们使用df['VAF']
,我们将返回一个名为'VAF'
的series对象。另外,pandas.Series
没有set_index
方法,pandas.DataFrame
有。你知道吗我们本可以这样做得到一个系列
看!相同的数据,但现在是一个名为
'VAF'
的序列首先将列连接到} ,将索引名更改为^{} ,然后将列
Series
,^{VAF
选择为一列DataFrame
:相关问题 更多 >
编程相关推荐