有不同的方法来做到这一点。
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