【问题标题】:Find and count the number of elements of one DataFrame from another DataFrame从另一个 DataFrame 中查找并计算一个 DataFrame 的元素数
【发布时间】:2021-12-09 18:19:33
【问题描述】:

我有 2 个输入数据帧。

  1. 数据帧一:
a1 a2
A C
B D
F D
A D
  1. 数据帧二:
emi_1 emi_2
A C
B L
C N
G D

我想要的输出: 我想计算 df1 中 df2 中每个元素的出现次数: 预期输出如下图所示:

注意:如果您根据 IMEI 对最终数据帧进行分组,那么该特定值的所有值都将被分组,这将对读者友好。

【问题讨论】:

    标签: python pandas data-science


    【解决方案1】:

    这里有一个方法,一步一步来

    >>> df1
    
      a1 a2
    0  A  C
    1  B  D
    2  F  D
    3  A  D
    
    >>> df2
    
      emi_1 emi_2
    0     A     C
    1     B     L
    2     C     N
    3     G     D
    
    >>> df2_melted = df2.melt(var_name="IMEI", value_name="Values")
    >>> df2_melted
    
        IMEI Values
    0  emi_1      A
    1  emi_1      B
    2  emi_1      C
    3  emi_1      G
    4  emi_2      C
    5  emi_2      L
    6  emi_2      N
    7  emi_2      D
    
    >>> df1_counts = df1.apply(pd.Series.value_counts)
    >>> df1_counts
    
        a1   a2
    A  2.0  NaN
    B  1.0  NaN
    C  NaN  1.0
    D  NaN  3.0
    F  1.0  NaN
    
    >>> final = (
             df2_melted.merge(df1_counts, how="left", 
                              left_on="Values", right_index=True)
                       .fillna(0)
                       .astype({"a1":int, "a2":int})
        )
    
    >>> final
    
        IMEI Values  a1  a2
    0  emi_1      A   2   0
    1  emi_1      B   1   0
    2  emi_1      C   0   1
    3  emi_1      G   0   0
    4  emi_2      C   0   1
    5  emi_2      L   0   0
    6  emi_2      N   0   0
    7  emi_2      D   0   3
    
    

    【讨论】:

    • 这个特殊的例子是针对小数据的。这种方法对大数据(比如 20,000 到 300000 行)是否可靠?
    • 最好的方法是自己测试一下。但很可能是的,这对熊猫来说并不多。唯一使用的非向量化方法是apply,如果df1 没有很多列,这没什么大不了的。
    • @ZulqarnainSabir 绝对比公认的解决方案快得多。
    • 我正在测试它。我在 df1 中有大量列,例如 20-30,每列最多可以有 30k 行,而 df2 的行数非常有限,例如 5-10
    • 到目前为止,您的方法更快并且效果很好
    猜你喜欢
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2022-01-03
    • 2016-10-07
    • 1970-01-01
    • 2019-10-09
    相关资源
    最近更新 更多