Mam dwie tabele jako ramki danych

T1

id  value1.   value2   
1.  hello.    34
1.  world.    55
1.  hai.      65
2.  universe. 67
3.  today.    89
3.  Country.  21
4.  Computer. 66
5.  Mouse.    45

Mam inny stół T2

id
1
2
3
4
5
6
7

Oczekiwany wynik

id  value1
1.  hello
2.  universe
3.  today
4.  computer
5.  mouse 
6.
7.

Próbowałem scalać, co daje mi wszystkie kolumny w T1. Ale chcę tylko kolumny value1. i jak mogę pobrać tylko pierwszą wartość znalezionego dopasowania?

UWAGA: Nie powinien upuszczać duplikatów w T2

2
Yash 1 kwiecień 2020, 20:42

3 odpowiedzi

Najlepsza odpowiedź

Usuń duplikaty na podstawie id przy użyciu drop_duplicates z T1, a następnie merge zarówno dataframe włączona id przez right, jak i na koniec wypełnij NaN pustą '' autorstwa {{X7} }.

pd.merge(df.iloc[:,:2].drop_duplicates('id'), df1, on='id', how='right').fillna('')

   id    value1
0   1     hello
1   2  universe
2   3     today
3   4  Computer
4   5     Mouse
5   6          
6   7          
1
Dishin H Goyani 1 kwiecień 2020, 18:15

Możemy spróbować z DataFrame.merge wybierając kolumny id i value1 oraz DataFrame.drop_duplicates, aby zachować tylko pierwszą (domyślnie keep == 'first'):

T2.merge(T1.drop_duplicates('id')[['id','value1']], how='left')


   id     value1
0   1      hello
3   2   universe
4   3      today
6   4   Computer
7   5      Mouse
8   6        NaN
9   7        NaN
3
ansev 1 kwiecień 2020, 18:06

Możesz usunąć zduplikowane indeksy w T1

df = df.drop_duplicates(subset=['id'], keep='first', inplace=False)

Potem po prostu połącz go z T2

2
Victor Silva 1 kwiecień 2020, 18:04