2015-07-21 18 views
14

Ho due datafram separati che condividono un numero di progetto. In type_df, il numero del progetto è l'indice. In time_df, il numero del progetto è una colonna. Vorrei contare il numero di righe in type_df che hanno un Project Type di 2. Sto cercando di farlo con pandas.merge(). Funziona alla grande quando si usano entrambe le colonne, ma non gli indici. Non sono sicuro di come fare riferimento all'indice e se merge è anche il modo giusto per farlo.Utilizzo unione su una colonna e indice in panda

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() 

Errore:

Name 'Index' is not defined.

output desiderato:

2 

risposta

16

Se si desidera utilizzare un indice nella stampa è necessario specificare left_index=True o right_index=True, e quindi utilizzare left_on o right_on . Per te dovrebbe essere qualcosa del genere:

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

bella soluzione, solo per i posti amor Penso che sia necessario cambiare '' 'type_df''' in modo che sia il DataFrame sinistro, o cambiare gli argomenti ecc., Perché il codice che viene pubblicato fallirà – dermen

+0

ah ok farò il cambiamento – maxymoo

3

È necessario avere la stessa colonna in ogni dataframe per unire.

In questo caso, basta fare una colonna 'Project' per type_df, poi immettersi su quella:

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 
Problemi correlati