【问题标题】:How to avoid losing data when using "outer" in pandas merging?在熊猫合并中使用“外部”时如何避免丢失数据?
【发布时间】:2021-08-23 11:13:51
【问题描述】:

我正在使用 Pandas 中的两个数据框,看起来像下面这样(不过,我正在使用的数据框有更多列):

>>> df_download
    date        |  app_name           | downloads | app_id
__________________________________________________________
0   2021-01-01  |  music app          | 500       | 100
1   2021-01-01  |  food delivery app  | 900       | 110
2   2021-01-01  |  fitness app        | 1200      | 120
3   2021-01-02  |  music app          | 700       | 100
4   2021-01-02  |  food delivery app  | 750       | 110
5   2021-01-02  |  fitness app        | 3000      | 120
6   2021-01-03  |  music app          | 800       | 100
7   2021-01-03  |  food delivery app  | 100       | 110
8   2021-01-03  |  fitness app        | 400       | 120
>>> df_active_users
    date        |  app_name           | active_users  | app_id
_______________________________________________________________
0   2021-01-01  |  music app          | 0             | 100
1   2021-01-01  |  food delivery app  | 30000         | 110
2   2021-01-01  |  fitness app        | 90000         | 120
3   2021-01-02  |  music app          | 15000         | 100
4   2021-01-02  |  food delivery app  | 0             | 110
5   2021-01-02  |  fitness app        | 80000         | 120
6   2021-01-03  |  music app          | 20000         | 100
7   2021-01-03  |  food delivery app  | 50000         | 110 
8   2021-01-03  |  fitness app        | 40000         | 120

我的目标是合并它们。我设法做到了,但不知何故,我丢失了一个应用程序。送餐应用突然消失。我使用了这段代码:

df_merged = pd.merge(df_active_users[['date', 'active_users', 'app_id', 'app_name']],
 df_downloads[['date', 'downloads', 'app_id']], on=['date', 'app_id', 'app_name'], how='outer')

结果:

df_merged['app_name'].unique()

 array(['music app','fitness app'], dtype=object)

有谁知道如何在不丢失任何应用数据的情况下从两个数据框中获取所有数据? 非常感谢您的帮助!

【问题讨论】:

  • merge 函数中使用的列与输入样本不匹配。 app_idapp_addproduct_id 吗?
  • 对此我很抱歉,我想了一件事,写了另一件事完全不同。现在所有的列都是app_id

标签: python pandas dataframe merge


【解决方案1】:

你失去了任何东西,你的 merge 功能(几乎)可以工作:

out = pd.merge(df_active_users, df_downloads,
               on=['date', 'app_id', 'app_name'],
               how='outer')
>>> out
        date           app_name  active_users  app_id  downloads
0 2021-01-01          music app             0     100        500
1 2021-01-01  food delivery app         30000     110        900
2 2021-01-01        fitness app         90000     120       1200
3 2021-01-02          music app         15000     100        700
4 2021-01-02  food delivery app             0     110        750
5 2021-01-02        fitness app         80000     120       3000
6 2021-01-03          music app         20000     100        800
7 2021-01-03  food delivery app         50000     110        100
8 2021-01-03        fitness app         40000     120        400

>>> out['app_name'].unique()
array(['music app', 'food delivery app', 'fitness app'], dtype=object)

>>> out['app_name'].value_counts()
music app            3
food delivery app    3
fitness app          3
Name: app_name, dtype: int64

【讨论】:

    猜你喜欢
    • 2022-06-13
    • 2017-12-09
    • 2017-04-26
    • 2017-02-11
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多