将一列数据从一数据帧添加到具有不相等行的另一数据帧

问题描述 投票:0回答:2

我是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       ...

再次,如果这个问题看起来很少年,我深表歉意。我尝试了几种合并数据的方法,但是它们没有用:(任何技巧,欢迎提出建议

python pandas
2个回答
0
投票

我认为您想在此处使用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)

python tutor link to example


0
投票

执行join,这会将所有值从df1带到df2

df1.set_index('m/z', inplace=True)
df2.set_index('m/z', inplace=True)
df3 = df2.join(df1, how='left')

join使用两个数据帧的索引作为关键字来匹配从df2df1的一行。如果您没有索引作为垫子]

© www.soinside.com 2019 - 2024. All rights reserved.