使用熊猫的每个用户的evetns总数

时间:2018-12-05 04:37:31

标签: python pandas dataframe matplotlib

有两个时间序列:a.csvb.csv,我很难解释和生成:“所有30岁以上男性用户的每位用户事件总数的直方图”(在Python中使用Pandas,matplotlib)

这是我到目前为止的工作:

df = pd.read_csv("a.csv") ## 
df1 = pd.read_csv("b.csv") ##
event_date = df['event_date'].astype('datetime64[ns]')
s1 = pd.merge(df, df1, how ='left', on=['user_id'])  ## merge casedf and demodf 
s2 = s1[['user_id', 'event_date', 'age', 'gender']].groupby(['user_id', 'event_date']).agg(['mean', 'count'])
counts = s1.groupby('user_id').size()
counts
d1f = counts.to_frame().reset_index()
d1f.head()
d1f = d1f.rename(columns={'user_id': 'USER-ID', 0: 'TOTAL-EVENTS'})
d1f.head() 
d2f = pd.read_csv("users.csv") 
# df2.head()
d2f = d2f.rename(columns={'age': 'AGE', 'gender': 'GENDER', 'user_id': 'USER-ID'})
d2f.head()
d1 = pd.merge(d1f, d2f, how ='left', on=['USER-ID'])  
d1.head()
d2m = d1[(d1["AGE"] > 30) & (d1["GENDER"] == 'm')]
d2m
x = d2m['TOTAL-EVENTS']
num_bins = 30
n, bins, patches = plt.hist(x, num_bins, facecolor='blue', alpha=0.5)
plt.show()

我认为,不仅我在解释所需的直方图时错了,而且还因为制作/绘图而自杀。

enter image description here

2 个答案:

答案 0 :(得分:0)

除此以外,一切看起来都不错。为了获取每个用户的事件计数,您需要对这些值进行分组。

来自

x = d2m['TOTAL-EVENTS']

收件人

x = d2m['TOTAL-EVENTS'].groupby(['USER-ID'])

答案 1 :(得分:0)

您的代码中有太多行不必要的命令。

下面的代码满足您的需求。

(您可能要检查图的格式选项。)

SELECT
               -- non-aggregating columns
    as_of_date
  , ISSUERID

              -- aggregating columns
  , COUNT( DISTINCT (issuer_id) )

FROM ...
WHERE ...
GROUP BY
              -- repeat all non-aggregating columns here
    as_of_date
  , ISSUERID

enter image description here

我设法达到了该图(箱大小= 5,所以7个箱从30到70),但我觉得每个箱的计数都不正确。