gpt4 book ai didi

python - 从 pandas DataFrame 列创建索引

转载 作者:行者123 更新时间:2023-11-28 20:13:58 29 4
gpt4 key购买 nike

我有一个如下所示的 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

第二个 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

我想让第二个 DataFrame 看起来像第一个。我试过像这样设置一个新索引:

df2.set_index(['Chrom','Loc','WT','Var']).VAF

但这只是给我一个多索引的 DataFrame。

有办法吗?

最佳答案

应用 format_map

fmt = '{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

单行

因为它很酷 ¯\_(ツ)_/¯

df[['VAF']].set_index(df.apply('{Chrom}-{Loc}-{WT}-{Var}'.format_map, 1).rename('ID'))

解释

创建一个接受字典并将其键值对作为参数传递给格式化字符串的函数。请注意,'Loc' 可以是 strint,因为 format/format_map 使用字符串表示。

fmt = '{Chrom}-{Loc}-{WT}-{Var}'.format_map

通过使用 df.applyaxis=1 将函数应用于 df 的每一行来创建一个新的系列对象。在这种情况下,每一行都将作为 pandas.Series 传递,并且可以在字典上下文中进行处理。这非常适合 format_map。我最终会将系列重命名为 'ID' 以匹配 OP 的输出。

idx = df.apply(fmt, 1).rename('ID')

现在,如果我们在 set_index 中使用 pandas.Series,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

我们本可以这样做来获得一个系列

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

看!相同的数据,但现在是名称为 'VAF'

的系列

关于python - 从 pandas DataFrame 列创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51791600/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com