【问题标题】:Update a column based on matching columns between two dataframes (Pandas) [duplicate]根据两个数据框(熊猫)之间的匹配列更新列[重复]
【发布时间】:2017-08-08 23:44:34
【问题描述】:

我有一个名为 pinkH1_ppm.txt 的文件,如下所示:

2.H8 7.61004 0.3
1.H8 8.13712 0.3
3.H6 7.53261 0.3
4.H8 7.49932 0.3
5.H6 7.72158 0.3
7.H8 8.16859 0.3
6.H6 7.70272 0.3
9.H8 8.1053 0.3
8.H6 7.65014 0.3
10.H6 7.5231 0.3
11.H6 7.58213 0.3
12.H6 7.72805 0.3
13.H6 8.02977 0.3
14.H6 7.69624 0.3
15.H8 7.82994 0.3
17.H8 7.24899 0.3
18.H6 7.6439 0.3
20.H8 7.78512 0.3
19.H8 7.65501 0.3
22.H8 7.47677 0.3
23.H6 7.7306 0.3
24.H6 7.80104 0.3
25.H8 7.67295 0.3
26.H6 7.67463 0.3
27.H6 7.64807 0.3
1.H1' 5.8202 0.3
2.H1' 5.90291 0.3
4.H1' 5.74125 0.3
3.H1' 5.54935 0.3
6.H1' 5.54297 0.3
8.H1' 5.238 0.3
11.H1' 5.50093 0.3
10.H1' 5.426 0.3
14.H1' 5.96177 0.3
15.H1' 5.959 0.3
17.H1' 5.75214 0.3
19.H1' 5.681 0.3
22.H1' 5.523 0.3
24.H1' 5.55313 0.3
25.H1' 5.70819 0.3
27.H1' 5.74236 0.3
26.H1' 5.48061 0.3

我有另一个名为 pinkH2_ppm.txt 的文件,如下所示:

5.H8 7.72158 0.3
2.H8 7.70272 0.3
7.H8 8.16859 0.3
8.H6 7.65014 0.3
9.H8 8.1053 0.3
10.H6 7.5231 0.3
12.H6 7.72805 0.3
13.H6 8.02977 0.3
14.H6 7.69624 0.3
17.H8 7.24899 0.3
16.H8 8.27957 0.3
18.H6 7.6439 0.3
19.H8 7.65501 0.3
20.H8 7.78512 0.3
21.H8 8.06057 0.3
22.H8 7.47677 0.3
23.H6 7.7306 0.3
24.H6 7.80104 0.3
5.H2' 4.2621 0.3
7.H2' 4.54158 0.3
9.H2' 4.50708 0.3
12.H2' 3.76928 0.3
13.H2' 4.67514 0.3
16.H1' 4.52918 0.3
18.H2' 4.71109 0.3
20.H2' 4.63392 0.3
21.H2' 4.65975 0.3
23.H2' 4.27267 0.3

如何检查 pinkH1_ppm.txt 的第一列值是否等于 pinkH2_ppm.txt 的第一列值,如果它们相等,则将 pinkH2_ppm.txt 中第二列的值替换为pinkH1_ppm.txt 中的第二列?

例如,pinkH1_ppm.txt 的第一列和第一行中的条目与pinkH2_ppm.txt 的第一列和第二行中的条目匹配。由于 2.H8 是相同的,我想用来自 pinkH1_ppm.txt 的 7.61004 替换来自 pinkH2_ppm.txt 的 7.70272,但我不确定如何使用 pandas 中的 ix 索引器来完成它。

这是我的代码:

import pandas as pd
import os
import sys
import re

filename = 'pinkH1_ppm.txt'
ppmColor = 'pinkH2_ppm.txt'


df = pd.read_csv(filename, sep = r'\s+', header=None)
df=df.ix[:, [0,1]]
color = pd.read_csv(ppmColor, sep = r'\s+', header=None, names = ('Atom','ppm','x'))

df.set_index(0,inplace=True)
color.set_index('Atom',inplace=True)
color.update(df)

color.to_csv(ppmColor,sep=" ", header = False)

【问题讨论】:

  • 我相信this 的帖子会对这个问题有所了解
  • @FussinHussin 谢谢,但有没有办法使用熊猫来做到这一点?
  • @cᴏʟᴅsᴘᴇᴇᴅ 我想从我的文件pinkH1_ppm.txt 中读取,看看第一列中的任何值是否与我的第二个文件pinkH2_ppm.txt 的第一列中的值匹配,如果匹配,那么我想将pinkH2_ppm.txt 中的第二列值替换为pinkH1_ppm.txt 中的第二列值,以获得与第一列中相同的值
  • @user8358234 什么是x
  • @cᴏʟᴅsᴘᴇᴇᴅ 应该是第三列吧?

标签: python pandas dataframe


【解决方案1】:
filename = 'pinkH1_ppm.txt'
ppmColor = 'pinkH2_ppm.txt'

df = pd.read_csv(filename, sep = r'\s+', header=None, names=('Atom','ppm', 'x'))
color = pd.read_csv(ppmColor, sep = r'\s+', header=None, names=('Atom','ppm', 'x')) 

color = pd.merge(color, df.loc[:, ['Atom','ppm']], how='left', on='Atom')

合并后,由于有两列同名“ppm”,它们被更改为“ppm_x”和“ppm_y”

l = color[~color.loc[:,'ppm_y'].isnull()].index.tolist()
color.loc[l,'ppm_x'] = color.loc[l,'ppm_y']
color.drop('ppm_y',axis =1,inplace=True)
color.rename(index=str,columns={"ppm_x": "ppm"})

【讨论】:

    猜你喜欢
    • 2015-08-09
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多