-1

Her üye için toplam miktar bulmak için bölme-uygulama-birleştirme yapıyorum. İhtiyacım olan veri karesi 14 sütun içermelidir: MemberID, DSFS_0_1, DSFS_1_2, DSFS_2_3, DSFS_3_4, DSFS_4_5, DSFS_5_6, DSFS_6_7, DSFS_7_8, DSFS_8_9, DSFS_9_10, DSFS_10_11, DSFS_11_12, DrugCount. Bununla birlikte, 14'ünü (DrugCount) almıyorum, neden herhangi bir fikir? Değişken joined çıkışlar 14, ama joined_grouped_add ben agregasyonu yaptığımız fonksiyonu, sadece Basitçe 13.Pandalarda bölünmüş-uygulamalı-combie sırasında ihmal edilen bir sütun

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import sys 
from sklearn.cross_validation import train_test_split 
from sklearn import linear_model 

# this function takes the drugcount dataframe as input and output a tuple of 3 data frames: DrugCount_Y1,DrugCount_Y2,DrugCount_Y3 
def process_DrugCount(drugcount): 
    dc = pd.read_csv("DrugCount.csv") 
    sub_map = {'1' : 1, '2':2, '3':3, '4':4, '5':5, '6':6, '7+' : 7} 
    dc['DrugCount'] = dc.DrugCount.map(sub_map) 
    dc['DrugCount'] = dc.DrugCount.astype(int) 
    dc_grouped = dc.groupby(dc.Year, as_index=False) 
    DrugCount_Y1 = dc_grouped.get_group('Y1') 
    DrugCount_Y2 = dc_grouped.get_group('Y2') 
    DrugCount_Y3 = dc_grouped.get_group('Y3') 
    DrugCount_Y1.drop('Year', axis=1, inplace=True) 
    DrugCount_Y2.drop('Year', axis=1, inplace=True) 
    DrugCount_Y3.drop('Year', axis=1, inplace=True) 
    return (DrugCount_Y1,DrugCount_Y2,DrugCount_Y3) 

# this function converts strings such as "1- 2 month" to "1_2" 
def replaceMonth(string): 
    replace_map = {'0- 1 month' : "0_1", "1- 2 months": "1_2", "2- 3 months": "2_3", "3- 4 months": '3_4', "4- 5 months": "4_5", "5- 6 months": "5_6", "6- 7 months": "6_7", \ 
        "7- 8 months" : "7_8", "8- 9 months": "8_9", "9-10 months": "9_10", "10-11 months": "10_11", "11-12 months": "11_12"} 
    a_new_string = string.map(replace_map) 
    return a_new_string 

# this function processes a yearly drug count data 
def process_yearly_DrugCount(aframe): 
    processed_frame = None 
    aframe.drop("Year", axis = 1, inplace = True) 
    reformed = aframe[['DSFS']].apply(replaceMonth) 
    gd = pd.get_dummies(reformed) 
    joined = pd.concat([aframe, gd], axis = 1) 
    joined.drop("DSFS", axis = 1, inplace = True) 
    joined_grouped = joined.groupby("MemberID", as_index = False) 
    joined_grouped_agg = joined_grouped.agg(np.sum) 
    print joined_grouped_agg 
    return processed_frame 
def main(): 
    pd.options.mode.chained_assignment = None 
    daysinhospital = pd.read_csv('DaysInHospital_Y2.csv') 
    drugcount = pd.read_csv('DrugCount.csv') 
    process_DrugCount(drugcount) 
    process_yearly_DrugCount(drugcount) 
    replaceMonth(drugcount['DSFS']) 

if __name__ == '__main__': 
    main() 
+0

Ve lin neredeler İşlevleri çağıranlar mı? – Parfait

+0

@Parfait Düzenlendi. – squidvision

+0

Çok fazla yardım etmek için burada çok fazla şey var. Sütunun kaldırıldığını görmek için içeriği görmek üzere her bölümü kırmanızı ve baskı ifadeleri eklemenizi tavsiye ederim. Aksi takdirde, [yeniden üretilebilir bir örnek] oluşturun (http://stackoverflow.com/help/mcve). – Parfait

cevap

0

, DrugCount (int/yüzer) bir sayısal alanı olarak okuma değildir CSV şirketinden çekilmiş döner . Aksi takdirde .agg(np.sum) işleminde saklanır. toplanmasının öncesinde d_type kontrol edin ve bir object tipi (yani dize sütunlar) olup olmadığını görmek: En process_DrugCount() işlevinde Aslında

print joined['DrugCount'].dtype 

, açıkça astype ile tamsayı içine DrugCount sütunu dönüştürmek ancak bunu yapmak yok process_yearly_DrugCount() işlevi. İkinci işlev ve DrugCount çalıştır aynı hat agrega toplamı işlemede muhafaza edilmelidir:

aframe['DrugCount'] = aframe['DrugCount'].astype(int) 

Ya da daha iyisi, main() dönüşüm yaparken önlemek için iki kez ikinci işlevlerde:

drugcount['DrugCount'] = drugcount['DrugCount'].astype(int) 

Ayrıca not do, read_csv() onun d_type ile argüman sütunlar türlerin açık tanımlanmasına olanak verir:

drugcount = pd.read_csv('DrugCount.csv', dtype={'DrugCount': np.int64}) 
İlgili konular