有不同的方法來做到這一點。
df = pd.DataFrame({'Date':['01-Jun-13','03-Jun-13', '15-Aug-13', '20-Jan-14', '21-Feb-14'],
'ABC':[100,-20,40,25,60], 'XYZ':[200,50,-5,15,80]})
- 我按照你的解釋分離了幾個月/年/日和分離的月份 - 年份。
def getMonth(s):
return s.split("-")[1]
def getDay(s):
return s.split("-")[0]
def getYear(s):
return s.split("-")[2]
def getYearMonth(s):
return s.split("-")[1]+"-"+s.split("-")[2]
- 我創造了新的欄目:
year
,month
,day
和 'yearMonth
'。在你的情況下,你需要兩者之一。您可以使用兩列'year','month'
或組使用一列yearMonth
df['year']= df['Date'].apply(lambda x: getYear(x))
df['month']= df['Date'].apply(lambda x: getMonth(x))
df['day']= df['Date'].apply(lambda x: getDay(x))
df['YearMonth']= df['Date'].apply(lambda x: getYearMonth(x))
輸出:
Date abc xyz year month day YearMonth
0 01-Jun-13 100 200 13 Jun 01 Jun-13
1 03-Jun-13 -20 50 13 Jun 03 Jun-13
2 15-Aug-13 40 -5 13 Aug 15 Aug-13
3 20-Jan-14 25 15 14 Jan 20 Jan-14
4 21-Feb-14 60 80 14 Feb 21 Feb-14
在這種情況下,我們對兩列分組:
for key,g in df.groupby(['year','month']):
print key,g
輸出:
('13', 'Jun') Date abc xyz year month day YearMonth
0 01-Jun-13 100 200 13 Jun 01 Jun-13
1 03-Jun-13 -20 50 13 Jun 03 Jun-13
('13', 'Aug') Date abc xyz year month day YearMonth
2 15-Aug-13 40 -5 13 Aug 15 Aug-13
('14', 'Jan') Date abc xyz year month day YearMonth
3 20-Jan-14 25 15 14 Jan 20 Jan-14
('14', 'Feb') Date abc xyz year month day YearMonth
在這種情況下,我們對一列分組:
for key,g in df.groupby(['YearMonth']):
print key,g
輸出:
Jun-13 Date abc xyz year month day YearMonth
0 01-Jun-13 100 200 13 Jun 01 Jun-13
1 03-Jun-13 -20 50 13 Jun 03 Jun-13
Aug-13 Date abc xyz year month day YearMonth
2 15-Aug-13 40 -5 13 Aug 15 Aug-13
Jan-14 Date abc xyz year month day YearMonth
3 20-Jan-14 25 15 14 Jan 20 Jan-14
Feb-14 Date abc xyz year month day YearMonth
4 21-Feb-14 60 80 14 Feb 21 Feb-14
- 如果你想訪問特定的項目,你可以使用
get_group
打印df.groupby([ 'YearMonth'])get_group ('Jun-13')
產量:
Date abc xyz year month day YearMonth
0 01-Jun-13 100 200 13 Jun 01 Jun-13
1 03-Jun-13 -20 50 13 Jun 03 Jun-13
- 到
get_group
類似。這種破解將有助於過濾值並獲得分組值。
這也會給出相同的結果。
print df[df['YearMonth']=='Jun-13']
輸出:
Date abc xyz year month day YearMonth
0 01-Jun-13 100 200 13 Jun 01 Jun-13
1 03-Jun-13 -20 50 13 Jun 03 Jun-13
您可以選擇abc
或xyz
值列表中Jun-13
print df[df['YearMonth']=='Jun-13'].abc.values
print df[df['YearMonth']=='Jun-13'].xyz.values
輸出:
[100 -20] #abc values
[200 50] #xyz values
您可以使用此工具查看您已分類爲「年 - 月」的日期,並在其上應用cretiria以獲取相關數據。
for x in set(df.YearMonth):
print df[df['YearMonth']==x].abc.values
print df[df['YearMonth']==x].xyz.values
我推薦也檢查這個answer以及。
感謝您的幫助。我無法讓TimeGrouper工作,但重新採樣(「M」)完成了這個訣竅。然而,只是fyi,它需要參數how ='sum'。我現在唯一的問題是劇情正在使用滴答標籤的完整日期時間。我需要它顯示每個酒吧的月份和年份。再次感謝。 – darkpool 2014-10-30 13:58:57