Pandy Pythona łączą tylko niektóre kolumny

Czy możliwe jest łączenie tylko niektórych kolumn? Mam ramkę danych df1 z kolumnami x, y, z i df2 z kolumnami x, A, b, c,d, e, F itp.

Chcę scalić dwa ramki danych na x, ale chcę tylko scalić kolumny df2.a, df2.nie cała ramka danych.

Wynikiem będzie ramka danych z X, y, Z, a, b.

Mógłbym scalić i usunąć niechciane kolumny, ale wygląda na to, że jest lepsza metoda.

Author: Ajean, 2013-07-31

4 answers

Możesz połączyć ramkę sub-DataFrame (tylko z tymi kolumnami):

df2[list('xab')]  # df2 but only with columns x, a, and b

df1.merge(df2[list('xab')])
 43
Author: Andy Hayden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-27 07:05:27

Chcesz użyć dwóch nawiasów, więc jeśli robisz działanie typu VLOOKUP:

df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')

To da Ci wszystko w oryginalnym df + dodaj odpowiednią kolumnę w df2, do której chcesz dołączyć.

 24
Author: Arthur D. Howland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-13 14:18:52

Możesz użyć .loc, aby wybrać określone kolumny ze wszystkimi wierszami, a następnie pociągnąć je. Przykład znajduje się poniżej:

pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')

W tym przykładzie łączysz dataframe1 i dataframe2. Zdecydowałeś się na zewnętrzne połączenie w lewo na "kluczu". Jednak dla dataframe2 podano .iloc, który pozwala na określenie wierszy i kolumn, które chcesz w formacie liczbowym. Używając :, wybierasz wszystkie wiersze, ale [0:5] wybiera pierwsze 5 kolumn. Można użyć .loc, aby określić po imieniu, ale jeśli Twoje radzenie sobie z długimi nazwami kolumn, wtedy .iloc może być lepsze.

 5
Author: Terrance DeJesus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-22 01:09:53

Służy do scalania wybranych kolumn z dwóch tabel.

Jeśli table_1 zawiera t1_a,t1_b,t1_c..,id,..t1_z kolumny, i table_2 zawiera t2_a,t2_b,t2_c...,id,..t2_z kolumny, i tylko t1_a,id,t2_a są wymagane w końcowej tabeli, następnie

mergedCSV = table_1[['t1_a','id']].merge(table_2[['t2_a','id']], on = 'id',how = 'left')

#save resulting output file

mergedCSV.to_csv('output.csv',index = False)

 3
Author: Marco167,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-22 21:48:14