我有两个共有一列的数据框:用户和应用程序。 每个用户可以有多个应用程序,每个应用程序都有名称和安装日期。
加入两个数据框后,我得到:
user_id ... app_name ins_date
user1 ... app1 1/1/2020
user1 ... app2 1/7/2020
user2 ... NULL NULL
user3 ... app1 1/5/2020
user4 ... app1 1/3/2020
我想避免重复用户,但又不丢失应用程序详细信息。可以在用户的df
内插入应用程序的df
吗?
类似的东西:
user_id ... app
user1 ... {'app_name': ['app1', 'app2'], 'ins_date': ['1/1/2020', '1/7/2020']}
user2 ... NULL
user3 ... {'app_name': ['app1'], 'ins_date': ['1/5/2020']}
user4 ... {'app_name': ['app1'], 'ins_date': ['1/3/2020']}
我尝试了DataFrameGroupBy.apply()
,但是我只能列出其中一列。
还有其他方法吗?
答案 0 :(得分:0)
您可以尝试
df.groupby('user_id').apply(lambda x: {'app_name': x['app_name'].tolist(), 'ins_date': x['ins_date'].tolist()})
输出
user_id
user1 {'app_name': ['app1', 'app2'], 'ins_date': ['1/1/2020', '1/7/2020']}
user2 {'app_name': [nan], 'ins_date': [nan]}
user3 {'app_name': ['app1'], 'ins_date': ['1/5/2020']}
user4 {'app_name': ['app1'], 'ins_date': ['1/3/2020']}
dtype: object
更新:使用pd.set_option('display.max_colwidth',-1)显示最大列宽