我是Python编程的新手(学习1-2个月,目前正在为我的PhD项目分析一些重要的脂质组学数据。我正在尝试从一个数据集向具有匹配值子集的较小数据集添加一列。如果这个问题看起来很少年,我深表歉意。
为了简便起见,我使用字母表示m / z值
df1
m/z Retention Time
a 0.187677
b 0.2345677
c 0.6574677
d 0.2233677
e 0.4568677
f 0.00945677
g 0.1865677
h 0.187677
i 0.222277
j 0.333677
k 0.1444677
l 0.187677
m 0.187677
n 0.187677
o 0.187677
**2005 rows x 10 columns**
我必须通过脂质分子分析软件分析df1中的其他两列(未显示),并获得了一个.csv输出文件,该文件经过过滤后包含相对的m / z比率及其倍数变化,p值,等
df2
m/z FC ...
b 2.3 ...
d 4.5 ...
e 0.5 ...
f 2.1 ...
g 6.7 ...
m 0.5 ...
aa 2.1 ...
bf 6.7 ...
**1005 rows x 5 columns**
您可以看到,行数不相等,两个文件中匹配的m / z值将没有相同的索引。我正在尝试根据匹配的m / z值将df1中的“保留时间”列添加到较小的df2中。输出看起来像这样。.
df2
m/z FC Retention Time ...
b 2.3 0.2345677 ...
d 4.5 0.2233677 ...
e 0.5 0.4568677 ...
f 2.1 0.00945677 ...
g 6.7 0.1865677 ...
m 0.5 0.187677 ...
aa 2.1 0.456677 ...
bf 6.7 0.456677 ...
再次,如果这个问题看起来很少年,我深表歉意。我尝试了几种合并数据的方法,但是它们没有用:(任何技巧,欢迎提出建议
我认为您想在此处使用pandas.DataFrame.merge
:
import pandas as pd
df1 = pd.DataFrame({
'm/z':'a b c'.split(),
'Retention Time':[1,2,3]
})
df2 = pd.DataFrame({
'm/z':'a b'.split(),
'FC':[4,5]
})
df2 = df2.merge(df1, on='m/z',how='left')
print(df2)
执行join
,这会将所有值从df1
带到df2
。
df1.set_index('m/z', inplace=True)
df2.set_index('m/z', inplace=True)
df3 = df2.join(df1, how='left')
join
使用两个数据帧的索引作为关键字来匹配从df2
到df1
的一行。如果您没有索引作为垫子]