2015-07-21 11 views
14

Mam dwie oddzielne ramki danych, które współużytkują numer projektu. W type_df numer projektu jest indeksem. W time_df numer projektu jest kolumną. Chciałbym policzyć liczbę wierszy w type_df, które mają Project Type z 2. Próbuję to zrobić z pandas.merge(). Działa wspaniale przy użyciu obu kolumn, ale nie indeksów. Nie jestem pewien, jak odwołać się do indeksu, a jeśli merge jest nawet właściwym sposobem, aby to zrobić.Korzystanie z funkcji scalania w kolumnie i indeksu w pandach

import pandas as pd 
type_df = pd.DataFrame(data = [['Type 1'], ['Type 2']], 
         columns=['Project Type'], 
         index=['Project2', 'Project1']) 
time_df = pd.DataFrame(data = [['Project1', 13], ['Project1', 12], 
           ['Project2', 41]], 
         columns=['Project', 'Time']) 
merged = pd.merge(time_df,type_df, on=[index,'Project']) 
print merged[merged['Project Type'] == 'Type 2']['Project Type'].count() 

Błąd:

Name 'Index' is not defined.

Pożądany wyjściowa:

2 

Odpowiedz

16

Jeśli chcesz użyć indeksu w seryjnej należy określić left_index=True lub right_index=True, a następnie użyj left_on lub right_on . Powinien on wyglądać mniej więcej tak:

merged = pd.merge(type_df,time_df, left_index = True, right_on='Project') 
+0

Nicea rozwiązanie, tylko dla stanowisk sake Myślę, że musisz przełączyć '' 'type_df''' tak, aby był lewą ramką DataFrame, lub zmienić argumenty etc, ponieważ kod, który jest wysłany, nie powiedzie się – dermen

+0

ah ok dokonam zmiany – maxymoo

3

Musisz mieć tę samą kolumnę w każdej ramce danych, aby się połączyć.

W tym przypadku, po prostu zrobić kolumnę 'projekt' na type_df, a następnie połączyć na tym:

type_df['Project'] = type_df.index.values 
merged = pd.merge(time_df,type_df, on='Project', how='inner') 
merged 
# Project Time Project Type 
#0 Project1 13  Type 2 
#1 Project1 12  Type 2 
#2 Project2 41  Type 1 

print merged[merged['Project Type'] == 'Type 2']['Project Type'].count() 
2 
Powiązane problemy