使用pandas计算列中的值

时间:2016-05-05 15:17:15

标签: python pandas dataframe

我有数据

member_id  device_id                       
19404      dfbc9d3230304cdfb0316cc32c41b67f    [2016-04-28, 2016-04-27, 2016-04-26, 2016-04-22]
19555      176e307bd8714a00ac2b99276123f0a7    [2016-04-29, 2016-04-28, 2016-04-27, 2016-04-23]
19632      a6d4b631e09a4b31afef4c93472c7da3                 [2016-04-29, 2016-04-28, 2016-04-27]
19792      0146b09048ce4c47af4bbc69e7999137    [2016-04-23, 2016-04-22, 2016-04-21, 2016-04-20]
20258      1510f9b4efc14183ad412eb54c9e058f                                         [2016-04-09]
           5f42f4d02d38456689e58d6a1b9a3e16    [2016-04-29, 2016-04-28, 2016-04-25, 2016-04-22]

我需要在列表的第三列中计算值。 我试着len(),我认为它会返回列表的长度,但这是错误的。 new = data.groupby(['member_id', 'device_id'])['event_date'].unique() count()返回所有值的总和

3 个答案:

答案 0 :(得分:2)

假设您的上一栏list中有l个值:

In [113]: df.l.map(len)
Out[113]:
0    4
1    4
2    3
3    4
4    1
5    4
Name: l, dtype: int64

如果您的上一列是字符串,则可以先将其转换为列表:

df.l.str.replace('[\[\]]', '').str.split('\s*,\s*').map(len)

答案 1 :(得分:1)

您可以将len功能应用于分组列。 .iat[0]获取组中的第一个项目,在这种情况下是您的列表。

>>> df.groupby(['member_id', 'device_id'])['event_date'].agg(
        {'event_count': lambda group: len(group.iat[0])})
                                            event_count
member_id device_id                                    
19404     dfbc9d3230304cdfb0316cc32c41b67f            4
19555     176e307bd8714a00ac2b99276123f0a7            4
19632     a6d4b631e09a4b31afef4c93472c7da3            3
19792     0146b09048ce4c47af4bbc69e7999137            4
20258     1510f9b4efc14183ad412eb54c9e058f            1
          5f42f4d02d38456689e58d6a1b9a3e16            4

答案 2 :(得分:1)

这就是你要找的东西:

import pandas as pd

df = pd.DataFrame(columns=('member_id','device_id','event_date'),data=[
[19404,'dfbc9d3230304cdfb0316cc32c41b67f',['2016-04-28', '2016-04-27', '2016-04-26', '2016-04-22']],
[19555,'176e307bd8714a00ac2b99276123f0a7',['2016-04-29', '2016-04-28', '2016-04-27', '2016-04-23']],
[19632,'a6d4b631e09a4b31afef4c93472c7da3',['2016-04-29', '2016-04-28', '2016-04-27']],
[19792,'0146b09048ce4c47af4bbc69e7999137',['2016-04-23', '2016-04-22', '2016-04-21', '2016-04-20']],
[20258,'1510f9b4efc14183ad412eb54c9e058f',['2016-04-09']],
[20258,'5f42f4d02d38456689e58d6a1b9a3e16',['2016-04-29', '2016-04-28', '2016-04-25', '2016-04-22']]
])

new = df.groupby(['member_id', 'device_id'])['event_date']

for each_n in new:
    print each_n[0],len(each_n[1].values[0])

<强>输出

(19404, 'dfbc9d3230304cdfb0316cc32c41b67f') 4
(19555, '176e307bd8714a00ac2b99276123f0a7') 4
(19632, 'a6d4b631e09a4b31afef4c93472c7da3') 3
(19792, '0146b09048ce4c47af4bbc69e7999137') 4
(20258, '1510f9b4efc14183ad412eb54c9e058f') 1
(20258, '5f42f4d02d38456689e58d6a1b9a3e16') 4