2016-02-13 103 views
0

我的位置使用Python中的for循環2.7

["HOME", "Office", "SHOPPING"] 

列表和一個大熊貓數據幀「DF」

Start_Location End_Location Date 
OFFICE   HOME   3-Apr-15 
OFFICE   HOME   3-Apr-15 
HOME   SHOPPING 3-Apr-15 
HOME   SHOPPING 4-Apr-15 
HOME   SHOPPING 4-Apr-15 
SHOPPING HOME   5-Apr-15 
SHOPPING HOME   5-Apr-15 
HOME   SHOPPING 5-Apr-15 

我想創建一個HOME 3個不同的數據幀中創建多個數據幀,Office,SHOPPING使用for循環,但我無法做到這一點。

我是新來的蟒蛇

請幫助。

感謝 露西

+0

什麼是你的問題?你不知道如何編寫for循環? – Goyo

+0

我知道如何編寫循環。我的問題是如何使用for循環創建3個不同的數據幀,如df1 = DF [DF.Start_Location == locations [0]]。希望這可以幫助 – Lucy

+0

不是。你的代碼對我來說很合適。 – Goyo

回答

1

使用groupby(),然後調用它的get_group()方法:

import pandas as pd 
import io 

text = b"""Start_Location End_Location Date 
OFFICE   HOME   3-Apr-15 
OFFICE   HOME   3-Apr-15 
HOME   SHOPPING 3-Apr-15 
HOME   SHOPPING 4-Apr-15 
HOME   SHOPPING 4-Apr-15 
SHOPPING HOME   5-Apr-15 
SHOPPING HOME   5-Apr-15 
HOME   SHOPPING 5-Apr-15""" 

locations = ["HOME", "OFFICE", "SHOPPING"] 

df = pd.read_csv(io.BytesIO(text), delim_whitespace=True) 
g = df.groupby("Start_Location") 
for name, df2 in g: 
    globals()["df_" + name.lower()] = df2 

,但我認爲在for循環中添加全局變量是不是一個好方法,你可以在GROUPBY轉換爲字典通過:

d = dict(iter(g)) 

然後你可以使用d["HOME"]來獲取數據。

+0

的列表中,感謝解決方案,但我想創建這些dfs而不使用read_csv,因爲主要的數據幀已經可用,而且如果位置列表更多,可以說20那麼在等號的左側給出名字就會有點整齊。有沒有其他方法可以做到這一點? – Lucy

+0

'read_csv()'僅用於演示,不需要調用它。我編輯了使用'globals()'的答案。 – HYRY

+0

謝謝,這個工程 – Lucy

2

我,我一直在尋找

import pandas as pd 
gbl = globals() 
for i in locations: 
gbl['df_'+i] = df[df.Start_Location==i] 

這將創建3個數據幀df_HOME,df_office的答案,df_SHOPPING

感謝,