例如,名为 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 中相同的名称相等。
我尝试做的是通过名称将这两个数据框合并在一起并与代码和质量结合使用
我的尝试似乎有效!
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')
似乎正在重现正确的结果。
答案 0 :(得分:1)
从df1
开始,并填写df2
,其中df1
缺失。 要求我们将每个的索引设置为'名称'
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