【问题标题】:Creating a dataframe column with each cell having the sum of all values with a certain trait创建一个数据框列,每个单元格具有具有特定特征的所有值的总和
【发布时间】:2023-02-23 03:39:51
【问题描述】:

我有两个熊猫的数据框,说:

df1 = pd.DataFrame({"Type": [A, A, B, B, C], "data": [1,2,3,4,5]}) 

        Type  data
    0     A     1
    1     A     2
    2     B     3
    3     B     4
    4     C     5
df2 = pd.DataFrame({"Type": [A, B, C]}) 

        Type 
    0     A 
    1     B
    2     C

并且我想在 df2 旁边添加一个列,说“值”,这样值中的每个单元格都具有 df1["Col2"] 中属于同一类型的所有元素的总和。

对于此特定示例,所需的输出如下所示:

        Type  data
    0     A     3
    1     B     7
    2     C     5

我很想为 df2["Type"] 中的每个 x 使用 while 并添加所有 df1[df1["Type"] == x]["data"] 但这似乎不是正确的形式。

我怎样才能达到这个期望的输出?

【问题讨论】:

  • 检查 groupby 总和
  • 你可以试试df2 = df1.groupby(['Type']).sum()

标签: python pandas dataframe


【解决方案1】:

通过Type列合并和分组:

df1.merge(df2, on='Type').groupby('Type').sum().reset_index()

  Type  data
0    A     3
1    B     7
2    C     5

【讨论】:

    【解决方案2】:

    您可以使用 Pandas 的 groupby 和 merge 函数来实现所需的输出。

    首先,将 df1Type 分组,并计算每组的 data 列的总和。您可以按如下方式执行此操作:

    df1_grouped = df1.groupby("Type").sum().reset_index()
    

    这将为您提供一个新的 DataFrame,其中每个 Typedata 列的总和。然后,您可以将这个新的 DataFrame 与 Type 列上的 df2 合并。您可以按如下方式执行此操作:

    result = pd.merge(df2, df1_grouped, on="Type")
    

    请注意,reset_index 方法用于将分组的 DataFrame 转换回具有 Type 列和求和数据列的常规 DataFrame。此外,on 参数用于指定要合并的列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2022-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多