Python 尝试合并两个数据帧时获得一些重复

Python 尝试合并两个数据帧时获得一些重复,python,python-3.x,pandas,Python,Python 3.x,Pandas,在这里发布之前,我在谷歌上搜索了一个解决方案,我尝试了一些不同的想法,但似乎没有任何效果。突出显示的部分就是问题所在。在最后一个DF中,我需要一个12674.4的实例和一个21008.21的实例 这是df1 这是df2 这是最终合并的数据帧 我不认为我真的可以在合并之前消除每个数据帧的重复,因为它们已经被消除了。对如何处理这个问题有什么想法吗 这是我的合并代码 df_merge = pd.merge(df_exp, df_rev,

在这里发布之前,我在谷歌上搜索了一个解决方案,我尝试了一些不同的想法,但似乎没有任何效果。突出显示的部分就是问题所在。在最后一个DF中,我需要一个12674.4的实例和一个21008.21的实例

这是df1

这是df2

这是最终合并的数据帧

我不认为我真的可以在合并之前消除每个数据帧的重复,因为它们已经被消除了。对如何处理这个问题有什么想法吗

这是我的合并代码

df_merge = pd.merge(df_exp, 
                df_rev,
                left_on=['SID','Year'],
                right_on=['PID','Year'],
                how='inner')
print(df_merge.shape)
我认为最终的结果应该是这样的


因此,如果PID、Sub_市场、状态、年份和费用重复,则将费用分成一半。我认为这解决了问题,因为我可以假设费用在“站点名称”的两个不同记录之间平均分摊。

在这种情况下,您可以执行以下操作:

df_merge['Expense'] = df_merge.groupby(['PID', 'sub_market', 'state', 'Year', 'Expense'])['Expense'].\
                               transform(lambda x: x/x.count())

   SID  Year    Expense  PID  ...        site_name state YTD_Revenue   Revenue
0  100  2017  50674.950  100  ...  HOUSE_RETAIL_21    UT    510602.8  899061.8
1  100  2018   6337.200  100  ...     HOUSE_RETAIL    UT    320649.1  324190.8
2  100  2018   6337.200  100  ...  HOUSE_RETAIL_21    UT    634509.4  593213.6
3  100  2019  10504.105  100  ...     HOUSE_RETAIL    UT   1262068.5  956957.0
4  100  2019  10504.105  100  ...  HOUSE_RETAIL_21    UT    163976.5  110292.3
5  100  2020  14241.510  100  ...     HOUSE_RETAIL    UT    161396.0  123000.9
注:
下次上载数据的文本版本而不是图像时

如何合并数据帧?要保留哪一行?例如,第2行和第3行具有不同的
站点名称和收入。哪一个是“正确”的?您可以使用
pd.drop_duplicates
subset
参数删除要合并的列的重复项。合并/加入时,您将得到2个值,因为df2中有2个2018和2019。如果你每年都要合并,你必须从df2中删除那些你不想要的。除非您在df1中添加第三列,例如sitename,以区分观察结果抱歉,1、2、3来自Excel中的填写。而且,我不认为这是一件重复的事情。例如,我刚刚尝试了这个方法,但没有任何改变:df_merged=df_merged.sort_值(['PID','Sub_Market','State','Year'],ascending=False)。删除重复项(['Expense',keep='first')。reset_index()非常有效。很抱歉,没有在开始时澄清问题。我花了一段时间才意识到这里发生了什么。一切都准备好了!