我有一个看起来像这样的DataFrame(其中'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
Run Code Online (Sandbox Code Playgroud)
第二个DataFrame看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
我想让第二个DataFrame看起来像第一个.我试过像这样设置一个新索引:
df2.set_index(['Chrom','Loc','WT','Var']).VAF
Run Code Online (Sandbox Code Playgroud)
但这只是给我一个多索引的DataFrame.
有没有办法做到这一点?
apply 一个 format_mapfmt = '{Chrom}-{Loc}-{WT}-{Var}'.format_map
df[['VAF']].set_index(df.apply(fmt, 1).rename('ID'))
VAF
ID
chr1-115227855-T-C 0.002662
chr1-115227856-C-T 0.001545
chr1-115227857-C-T 0.001236
chr1-115227858-A-T 0.001793
chr1-115227880-C-T 0.001115
Run Code Online (Sandbox Code Playgroud)
因为它很酷 ¯\_(?)_/¯
df[['VAF']].set_index(df.apply('{Chrom}-{Loc}-{WT}-{Var}'.format_map, 1).rename('ID'))
Run Code Online (Sandbox Code Playgroud)
创建一个函数,该函数接受字典并将其键:值对作为参数传递给格式化字符串.注意,'Loc'可以是str或int为format/ format_map使用字符串表示.
fmt = '{Chrom}-{Loc}-{WT}-{Var}'.format_map
Run Code Online (Sandbox Code Playgroud)
通过应用功能的每一行作出了一系列新的对象df使用df.apply同axis=1.在这种情况下,每行将作为a传递pandas.Series,并可在字典上下文中处理.那是完美的format_map.我最终将系列重命名'ID'为匹配OP的输出.
idx = df.apply(fmt, 1).rename('ID')
Run Code Online (Sandbox Code Playgroud)
现在如果我们pandas.Series在a中使用a set_index,Pandas会将现有索引与传递的序列的索引对齐......这很好.
使用双方括号对列进行切片,[['VAF']]以确保我们保持数据框的列数等于['VAF'].否则,如果我们使用,df['VAF']我们将返回一个名称为的系列对象'VAF'.此外,pandas.Series没有set_index方法和pandas.DataFrame做.
df[['VAF']].set_index(idx)
VAF
ID
chr1-115227855-T-C 0.002662
chr1-115227856-C-T 0.001545
chr1-115227857-C-T 0.001236
chr1-115227858-A-T 0.001793
chr1-115227880-C-T 0.001115
Run Code Online (Sandbox Code Playgroud)
我们本可以做到这一点来获得一系列
df.set_index(idx)['VAF']
ID
chr1-115227855-T-C 0.002662
chr1-115227856-C-T 0.001545
chr1-115227857-C-T 0.001236
chr1-115227858-A-T 0.001793
chr1-115227880-C-T 0.001115
Name: VAF, dtype: float64
Run Code Online (Sandbox Code Playgroud)
看到!相同的数据,但现在是一个名称为的系列'VAF'
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |