Có nhiều cách khác nhau để thực hiện điều đó.
- Tôi đã tạo khung dữ liệu để hiển thị các kỹ thuật khác nhau để lọc dữ liệu của bạn.
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]})
- Tôi đã tách riêng các tháng/năm/ngày và được phân cách trong năm theo tháng như bạn đã giải thích.
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]
- Tôi tạo ra các cột mới:
year
, month
, day
và 'yearMonth
'. Trong trường hợp của bạn, bạn cần một trong cả hai. Bạn có thể sử dụng nhóm hai cột 'year','month'
hoặc sử dụng một cột 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))
Output:
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
- Bạn có thể đi qua các nhóm khác nhau trong groupby (..) mục .
Trong trường hợp này, chúng tôi được nhóm bởi hai cột:
for key,g in df.groupby(['year','month']):
print key,g
Output:
('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
Trong trường hợp này, chúng tôi được nhóm bởi một cột:
for key,g in df.groupby(['YearMonth']):
print key,g
Output:.
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
- Trong trường hợp bạn truy cập muốn các đề mục cụ thể, bạn có thể sử dụng
get_group
in df.groupby ([ 'nămTháng']) get_group ('Jun-13')
Đầu ra:
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
- Tương tự như
get_group
. Hack này sẽ giúp lọc các giá trị và nhận các giá trị được nhóm.
Điều này cũng sẽ cho kết quả tương tự.
print df[df['YearMonth']=='Jun-13']
Output:
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
Bạn có thể chọn danh sách abc
hoặc xyz
giá trị trong Jun-13
print df[df['YearMonth']=='Jun-13'].abc.values
print df[df['YearMonth']=='Jun-13'].xyz.values
Output:
[100 -20] #abc values
[200 50] #xyz values
Bạn có thể sử dụng điều này để đi qua những ngày bạn đã phân loại là "năm tháng" và áp dụng cretiria vào nó để nhận dữ liệu liên quan.
for x in set(df.YearMonth):
print df[df['YearMonth']==x].abc.values
print df[df['YearMonth']==x].xyz.values
Tôi cũng khuyên bạn cũng nên kiểm tra điều này answer.
Cảm ơn sự giúp đỡ. Tôi không thể có được TimeGrouper để làm việc, nhưng resample ("M") đã làm các trick. Tuy nhiên, chỉ cần fyi, nó yêu cầu đối số how = 'sum'. Vấn đề duy nhất của tôi bây giờ là cốt truyện đang sử dụng datetime đầy đủ cho các nhãn tick. Tôi cần nó để chỉ hiển thị tháng và năm cho mỗi thanh. Cảm ơn một lần nữa. – darkpool