【问题标题】:Python pandas: Accessing data from multiple data frame based on conditionPython pandas:根据条件从多个数据框中访问数据
【发布时间】:2020-12-14 16:33:00
【问题描述】:

我必须计算一个指标,该指标要求我从多个列中找到同一“用户”的属性。例如,我有两个数据框如下所示:

calls_per_month.head(10)
    user_id month   call_date
0   1000    12  16
1   1001    8   27
2   1001    9   49
3   1001    10  65
4   1001    11  64
5   1001    12  56
6   1002    10  11
7   1002    11  55
8   1002    12  47
9   1003    12  149

internet_per_month.head(10)

 user_id session_date mb_used
0   1000    12  2000.0
1   1001    8   7000.0
2   1001    9   14000.0
3   1001    10  23000.0
4   1001    11  19000.0
5   1001    12  20000.0
6   1002    10  7000.0
7   1002    11  20000.0
8   1002    12  15000.0
9   1003    12  28000.0

我想为每个使用互联网或拨打电话的每个月的 user_id 计算一个看起来像这样的指标: `使用 = mb_used + call_date' 这将是一个看起来像的列(我已经手工计算过):

 user_id month usage
0   1000    12  2016
1   1001    8   7027
2   1001    9   14049
3   1001    10  23065
4   1001    11  19064
5   1001    12  20056
6   1002    10  7011
7   1002    11  20055
8   1002    12  15047
9   1003    12  28149

上面我显示的头部没有显示它,但是有一些用户在特定月份没有拨打电话但使用了数据,所以我必须考虑到这一点,从某种意义上说它不应该忽略那些用户,只需为不可用的数据添加 0。

我应该先对表进行外部联接吗?或者创建一个新表不是正确的方法?任何指导表示赞赏。

谢谢

【问题讨论】:

    标签: python pandas pandas-groupby pivot-table data-wrangling


    【解决方案1】:

    你应该先合并或加入这些,然后再进行操作。在这里,我在internet_per_month 上做一个left join(并打电话给fillna);如果有可能有人拨打电话而不是互联网,则最好使用外部连接。

    df = pd.merge(
        left=internet_per_month, 
        right=calls_per_month, 
        how="left",
        left_on=["user_id", "session_date"], 
        right_on=["user_id", "month"],
    )
    
    df.fillna(0)
    df["usage"] = df["mb_used"] + df["call_date"]
    

    输出:

       user_id  month  call_date  session_date  mb_used    usage
    0     1000     12         16            12   2000.0   2016.0
    1     1001      8         27             8   7000.0   7027.0
    2     1001      9         49             9  14000.0  14049.0
    3     1001     10         65            10  23000.0  23065.0
    4     1001     11         64            11  19000.0  19064.0
    5     1001     12         56            12  20000.0  20056.0
    6     1002     10         11            10   7000.0   7011.0
    7     1002     11         55            11  20000.0  20055.0
    8     1002     12         47            12  15000.0  15047.0
    9     1003     12        149            12  28000.0  28149.0
    

    【讨论】:

      猜你喜欢
      • 2020-08-29
      • 2015-09-26
      • 2020-03-18
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多