如何解决我需要帮助加入基于字符串值列的 2 个数据框
我有 2 个数据框,我需要根据两个数据框的外连接(基于列“名称”)获取一个新数据框。
姓名 | 总计 |
---|---|
aabc | 12 |
最小 | 32 |
aabd | 34 |
最小 | 45 |
迷你 | 40 |
姓名 | name2 |
---|---|
最小 | 英国广播公司 |
aabc | sddd |
aabd | 棉 |
最小 | 阿斯达 |
薄荷 | asde |
输出:
姓名 | name2 | 总计 |
---|---|---|
最小 | 英国广播公司 | 32 |
aabc | sddd | 12 |
aabd | 棉 | 34 |
最小 | 阿斯达 | 45 |
迷你 | NaN | 40 |
薄荷 | asde | NaN |
我试图合并它们,但是在 newdf 中我有所有名称的重复项。我无法根据索引合并 dfs,因为它们具有不同的索引。
dfnew=pd.merge(df1,df2,on='name',how='outer')
我还尝试按“名称”对 dfnew 进行分组,但“总计”列显示为 0。
dfnew.groupby(['name','name2']).sum()
我已经在 IBM Db2 on Cloud 上的 SQL 中获得了想要的结果,但我无法将其保存到表中或保存为 csv 文件。 当我尝试在 jupyter notebook 中使用 SQL magic 时,我收到一个错误,指出当前不支持 RIGHT 和 FULL OUTER JOIN
%%sql
select a.name,a.total,b.name2
from df1 a
full outer join df2 b
on a.name=b.name
请帮助提供任何想法或告诉我我做错了什么。我不明白为什么合并函数无法将“名称”列中的字符串识别为相同。谢谢!
This is how my SQL select table looks like
解决方法
您需要以某种方式摆脱相互冲突的索引。
我会去:
# Saving the indices:
index_1 = df1.index
index_2 = df2.index
# Removing the indices temporarily:
df1.reset_index(inplace=True)
df2.reset_index(inplace=True)
# If you index name is 'index'
df1.drop(columns=['index'])
df2.drop(columns=['index'])
# Joing
df1.set_index('name',inplace=True)
df2.set_index('name',inplace=True)
df_joined = df1.join(df2,how=outer,rsuffix='_')
# Adding the indices again
df1['index'] = index_1
df1.set_index('index',inplace=True)
df2['index'] = index_2
df2.set_index('index',inplace=True)
,
您可以创建一个临时列,然后将该列用于 mege 操作。
merged_df = (
df1.assign(t=df1.groupby('name').cumcount()).merge(
df2.assign(t=df2.groupby('name').cumcount()),on=['name','t'],how='outer')
.drop('t',1)
)
输出:
name total name2
0 aabc 12.0 sddd
1 minc 32.0 bbcs
2 aabd 32.0 mian
3 minc 45.0 asda
4 mini 40.0 NaN
5 mint NaN asde
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。