2016-08-30 2 views
0

У меня есть два фрейма данных: df1 и df2.python pandas: объединить два кадра данных, но не объединить строки повторения

df1 следующая:

name exist 
    a  1 
    b  1 
    c  1 
    d  1 
    e  1 

df2 (только один столбец: имя) является следующее:

 name 
     e  
     f  
     g  
     a  
     h  

Я хочу, чтобы объединить эти два dataframe, и не сливались повторять имена, Я имею в виду, если имя в df2 существует в df1, просто покажите один раз, иначе, если имя df2 не существует в df1, установите существующее значение равным 0 или Nan. например, как df1 (есть и е) и df2 (есть и е, просто показал, е раз), я хочу быть следующим ДФ:

 a  1 
    b  1 
    c  1 
    d  1 
    e  1 
    f  0 
    g  0 
    h  0 

Я использовал функцию Concat чтобы сделать это, мой код выглядит следующим образом:

import pandas as pd 


df1 = pd.DataFrame({'name': ['a', 'b', 'c', 'd', 'e'], 
       'exist': ['1', '1', '1', '1', '1']}) 
df2 = pd.DataFrame({'name': ['e', 'f', 'g', 'h', 'a']}) 
df = pd.concat([df1, df2]) 
print(df) 

но результат неправильно (имя а и е повторяют будут показаны):

exist name 
0  1 a 
1  1 b 
2  1 c 
3  1 d 
4  1 e 
0 NaN e 
1 NaN f 
2 NaN g 
3 NaN h 
4 NaN a 

пожалуйста, дайте свои руки, заранее спасибо!

ответ

1

Как указано заголовок, вы можете использовать merge вместо concat и указать how параметр как outer, так как вы хотите, чтобы все записи из df1 и df2, который определяет внешнее соединение:

import pandas as pd 
pd.merge(df1, df2, on = 'name', how = 'outer').fillna(0) 

# exist name 
# 0 1 a 
# 1 1 b 
# 2 1 c 
# 3 1 d 
# 4 1 e 
# 5 0 f 
# 6 0 g 
# 7 0 h 
+0

благодаря @Psidom для ваш ответ, я приму это. Не могли бы вы рассказать мне о том, как «внешний» подробно, я имею в виду разницу в левом, правом, внутреннем, сливочном. Благодаря! – tktktk0711

+0

Проверьте этот http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html, а также этот http://stackoverflow.com/questions/448023/what-is-the-difference -between-влево-вправо-наружный и внутренний--соединения. Грубо говоря, соединение является разновидностью соответствия таблиц на основе некоторых ключевых столбцов; left сохраняет все записи из первого кадра данных; right сохраняет все записи из второго кадра данных; внутренний хранит только записи, которые существуют в обоих кадрах данных, а внешний хранит все записи. – Psidom

+0

спасибо за ваш ответ! – tktktk0711

 Смежные вопросы

  • Нет связанных вопросов^_^