Pandas:把一份清单数据按时间序列转为dict、list的混合样式

前言:

标题很难懂,直接上个例子吧。
在这里插入图片描述
上图为原始数据,想要转为下面的格式:
{‘用户1’: [{第1天的发帖量,第2天的发帖量…第31天的发帖量}, {第1天的投票数合计,第2天的投票数合计…第31天的投票数合计}, {第1天的收入合计,第2天的收入合计…第31天的收入合计}]}
很复杂吧,我也不明白整理成这样格式的意义是什么=,=

代码:

import pandas as pd

#合并清单
data_m1 = pd.read_csv('Py2019-01.csv', encoding='gbk')
data_m2 = pd.read_csv('Py2019-02.csv', encoding='gbk')
data_total = pd.concat([data_m1, data_m2], axis=0)

#发起时间处理
data_total['start_time'] = data_total.apply(lambda x: x['发起时间'][5:10], axis=1)

#每个用户分到日期的发帖量
user_post = data_total.pivot_table(index='用户名', values='投票数', columns='start_time', aggfunc='count',fill_value=0)
#每个用户分到日期的投票数
user_vote = data_total.pivot_table(index='用户名', values='投票数', columns='start_time', aggfunc='sum',fill_value=0)
#每个用户分到日期的获得奖励金额
user_money = data_total.pivot_table(index='用户名', values='支出总额', columns='start_time', aggfunc='sum',fill_value=0)

def combine(df, df_columns):
    answer = []
    for col in df_columns:
        answer.append(df[col])
    return answer

df_columns = list(user_money.columns)

user_post['total_post'] = user_post.apply(combine, df_columns=df_columns, axis=1)
user_vote['total_vote'] = user_vote.apply(combine, df_columns=df_columns, axis=1)
user_money['total_money'] = user_money.apply(combine, df_columns=df_columns, axis=1)

user = pd.concat([user_post[['total_post']], user_vote[['total_vote']], user_money[['total_money']]], axis=1)

def total_combine(df):
    return [df['total_post'], df['total_vote'], df['total_money']]

user['total'] = user.apply(total_combine, axis=1)
user_total = user[['total']].reset_index()

keys = user_total['用户名'].tolist()
values = user_total['total'].tolist()
dict_list = dict(zip(keys, values))
print(dict_list['a-alice'])

猜你喜欢

转载自blog.csdn.net/weixin_42029733/article/details/106236257