Python pandas从现有列中的数据和另一个数据帧中创建新列

时间:2016-07-25 14:16:45

标签: python pandas dataframe

我有一个名为' mydata'的DataFrame,如果我这样做

len(mydata.loc['2015-9-2'])

它计算mydata中具有该日期的行数,并返回一个类似

的数字
1067

我有另一个名为' yourdata'的数据框。看起来像

     timestamp
51   2015-06-22
52   2015-06-23
53   2015-06-24
54   2015-06-25
43   2015-07-13

现在我想在你的数据中使用每个日期,而不是输入每个日期

len(mydata.loc['2015-9-2'])

我可以浏览你的数据'使用它们像

len(mydata.loc[yourdata['timestamp']])

并生成一个包含结果的新DataFrame,或者只是为您的数据添加一个新列,并显示每个日期的结果,但我是否因为如何执行此操作而丢失了?

以下不起作用

yourdata['result'] = len(mydata.loc[yourdata['timestamp']])

这两个

yourdata['result'] = len(mydata.loc[yourdata.iloc[:,-3]])

这确实有效

yourdata['result'] = len(mydata.loc['2015-9-2'])

但是没有好处,因为我想在每一行中使用日期而不是固定日期。

编辑:mydata的前几行

    timestamp            BPM
 0  2015-08-30 16:48:00   65
 1  2015-08-30 16:48:10   65
 2  2015-08-30 16:48:15   66
 3  2015-08-30 16:48:20   67
 4  2015-08-30 16:48:30   70

2 个答案:

答案 0 :(得分:1)

   if (!navigator.geolocation) {
        geolocate.innerHTML = 'Geolocation is not available';
    } else {
        geolocate.onclick = function (e) {
            var tl = new TimelineMax({repeat:2});   
            tl.to("svg.pointwhite", .10, {transformOrigin: "50% 100%", scaleY:0.25, yoyo:true, repeat:1})
              .to("svg.pointwhite", .65, {y:-6, ease:Circ.easeOut, yoyo:true, repeat:1});                   
            e.preventDefault();
            e.stopPropagation();
            map.locate({ maxZoom: 12}); // locate option goes here       
        };
    }     

答案 1 :(得分:0)

我认为您需要value_counts,但首先按dt.date转换为日期,转换为to_datetime并最后使用join

print (yourdata.join(pd.to_datetime(mydata.timestamp.dt.date)
                       .value_counts()
                       .rename('len'), on='timestamp'))

样品:

print (mydata)
             timestamp  BPM
0  2015-06-23 16:48:00   65
1  2015-06-23 16:48:10   65
2  2015-06-23 16:48:15   66
3  2015-06-23 16:48:20   67
4  2015-06-22 16:48:30   70

print (yourdata)
     timestamp
51  2015-06-22
52  2015-06-23
53  2015-06-24
54  2015-06-25
43  2015-07-13

#if dtype not datetime
mydata['timestamp'] = pd.to_datetime(mydata['timestamp'])
yourdata['timestamp'] = pd.to_datetime(yourdata['timestamp'])

print (yourdata.join(pd.to_datetime(mydata.timestamp.dt.date)
                       .value_counts()
                       .rename('len'), on='timestamp'))
    timestamp  len
51 2015-06-22  1.0
52 2015-06-23  4.0
53 2015-06-24  NaN
54 2015-06-25  NaN
43 2015-07-13  NaN