如何将Pandas数据帧与dict of list合并

2024-06-17 11:17:33 发布

您现在位置:Python中文网/ 问答频道 /正文

像这样合并df的最佳方法是什么:

+------------+----------+
| domain     | username |
+------------+----------+
| @gmail.com | gagaga   |
+------------+----------+
| @mail.com  | bobo     |
+------------+----------+

像这样的口述:

^{pr2}$

要得到这个:

+------------+----------+-----------+
| domain     | username | app       |
+------------+----------+-----------+
| @gmail.com | gagaga   | gmail     |
+------------+----------+-----------+
| @gmail.com | gagaga   | youtube   |
+------------+----------+-----------+
| @gmail.com | gagaga   | gdrive    |
+------------+----------+-----------+
| @live.com  | bobo     | email     |
+------------+----------+-----------+
| @live.com  | bobo     | microsoft |
+------------+----------+-----------+

建议将dict转换为具有重复行的df,并使用merge,还是应该使用map,然后使用unstack the app column?在


Tags: 方法comliveappdfyoutubedomainusername
2条回答

试试这个

df2= pd.DataFrame.from_dict(domain_to_app,orient='index').unstack().reset_index()
result= pd.merge(df1,df2[df2[0].notnull()],left_on=['domain'],right_on=['level_1'])
result=result[['domain','username',0]].rename(columns={0:'app'})
print result

输出:

^{pr2}$

说明:

从字典中创建Dataframe,执行pd.merge,然后根据需要清理Dataframe。在

您可以使用^{}表示新的Series,然后使用chain.from_iterable表示新的DataFrame

s = df['domain'].map(domain_to_app)

from itertools import chain

lens = s.str.len()
df = pd.DataFrame({
    'domain' : df['domain'].values.repeat(lens),
    'username' : df['username'].values.repeat(lens),
     'app' : list(chain.from_iterable(s))
})

print (df)
       domain username      app
0  @gmail.com   gagaga    gmail
1  @gmail.com   gagaga  youtube
2  @gmail.com   gagaga   gdrive
3   @mail.com     bobo    email
4   @mail.com     bobo  dropbox

如果需要重复多个列从mapped值创建DaatFrame,按^{}重塑形状,按^{}进行“重复”:

^{pr2}$

相关问题 更多 >