例如,两个名为df1,df2的数据帧显示如下:

### df1
Name    Code   Mass
5N11     s1     0.1545
5N12     NaN     0.22
5N13     s3   0.2123
5N15     s5    0.1486
5N17     NaN    0.2100

### df2
Name    Code   Mass
5N12     s2    0.22
5N13     NaN   0.2123
5N14     s4    0.35
5N16     s6    0.07
5N17     s7    0.2100


一些背景介绍:


df1和df2是两个数据帧,都包含某些项目的部分数据。
df1和df2中的某些名称相同。
df1和df2中对应相同名称的质量相等。
有些行包含有限代码,有些则没有。


我想做的是通过名称将这两个数据框合并在一起,并结合其代码和质量。

更新资料

我的尝试似乎奏效!

df = pd.concat([df1,df2],ignore_index= True)
df = df.dropna(subset= ["Code"])
df = pd.merge(df.groupby('Name').sum().reset_index(),
              df[['Name', 'Code',"Mass"]].drop_duplicates(),
              how='right')


似乎在再现正确的结果。

python - 通过相同的行名称融合两个数据框-LMLPHP

最佳答案

df1开头,并从df2缺失的地方填写。这要求我们将每个索引设置为“名称”

快速解决方案

df1.set_index('Name').combine_first(df2.set_index('Name'))


完整解决方案

设定

from StringIO import StringIO
import pandas as pd

text1 = """Name    Code   Mass
5N11     s1     0.1545
5N12     NaN     0.22
5N13     s3   0.2123
5N15     s5    0.1486
5N17     NaN    0.2100"""

text2 = """Name    Code   Mass
5N12     s2    0.22
5N13     NaN   0.2123
5N14     s4    0.35
5N16     s6    0.07
5N17     s7    0.2100"""

df1 = pd.read_csv(StringIO(text1), delim_whitespace=True)

df2 = pd.read_csv(StringIO(text2), delim_whitespace=True)


合并结果

df1.set_index('Name').combine_first(df2.set_index('Name')).reset_index()


看起来像:

   Name Code    Mass
0  5N11   s1  0.1545
1  5N12   s2  0.2200
2  5N13   s3  0.2123
3  5N14   s4  0.3500
4  5N15   s5  0.1486
5  5N16   s6  0.0700
6  5N17   s7  0.2100

关于python - 通过相同的行名称融合两个数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37382128/

10-12 16:58
查看更多