创建一个新列,该列用于计算一行中有多少个条目满足熊猫中数据框每一行的条件

时间:2019-05-13 19:57:51

标签: python pandas time-series

我正在使用时间序列数据来总结用户对产品的使用情况(每个用户是一列,每个日期是一行)。我试图总结使用该产品的用户所占的百分比,这要求他们每天使用一定时间。

date          user1         user2           user3              user4
2017-06-23    120.000000    200.000000      20.000000          0.000000   
2017-06-24    201.000000    195.000000      10.000000          0.000000   
2017-06-25    267.333333    190.000000      56.666667          0.000000   
2017-06-26    255.500000    142.500000      42.500000          0.000000   
2017-06-27    269.200000    131.800000      45.600000          0.000000   
2017-06-28    241.500000    138.333333      49.500000          0.000000   
2017-06-29    224.000000    118.571429      61.000000          0.000000  

我正在尝试计算一行中每个条目满足条件的次数,并创建一个新的列来对此进行计数,并除以用户总数* 100。我尝试过:

df['Percent of Adoption'] = (df[df.columns > 50].count(axis=0)/len(df.columns))*100

这会产生以下错误:

TypeError: '>' not supported between instances of 'str' and 'int'

所需的输出:

date          user1         user2           user3              user4//     
2017-06-23    120.000000    200.000000      20.000000          0.000000   
2017-06-24    201.000000    195.000000      10.000000          0.000000   
2017-06-25    267.333333    190.000000      56.666667          0.000000   
2017-06-26    255.500000    142.500000      42.500000          0.000000   
2017-06-27    269.200000    131.800000      45.600000          0.000000   
2017-06-28    241.500000    138.333333      49.500000          0.000000   
2017-06-29    224.000000    118.571429      61.000000          0.000000 

Percent of Adoption
50.0
50.0
75.0
50.0
50.0
50.0
75.0

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

我已根据字词回答了您的问题。但是我的答案与您的百分比答案不符。所以我误会了,或者您正在使用虚拟变量。

首先将索引设置为日期。

df = df.set_index('date')

然后过滤数据框以获取大于50的值并跨列求和(轴= 1),然后除以列数。

df['percent_of_adoption'] = (df > 50).sum(axis = 1).div(df.count(axis = 1)) * 100