【问题标题】:Groupby pandas data-frame based on values from another dfGroupby Pandas 数据框基于来自另一个 df 的值
【发布时间】:2021-11-05 08:52:20
【问题描述】:

我有一个数据框,我在其中保留所有相关属性,另一个数据框具有我想要对第一个 df 进行分组的属性。

我知道,如果您将系列(一列)作为参数,您可以按数据框分组,如果您放入数据框,则会出现错误。

ValueError: Grouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensional

我知道我可以将列连接到原始数据框,但我不希望这样做,除非没有其他解决方案。

df.groupby([sorted_team_names]).ngroup()

这是我的代码。 sorted_team_names 是一个包含两列的 df,而且它与 df 具有相同的索引。

这是一个相当笼统的问题,我不确定您是否需要数据样本。

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    一种方法是分别按列分组:

    df1 = pd.DataFrame({'a':[1,2,2,1], 'b':[1,2,2,1]})
    print (df1)
       a  b
    0  1  1
    1  2  2
    2  2  2
    3  1  1
    
    df2 = pd.DataFrame({'c':[1,2,3,7]})
    print (df2)
       c
    0  1
    1  2
    2  3
    3  7
    
    df3 = df2.groupby([df1['a'], df1['b']]).sum()
    print (df3)
         c
    a b   
    1 1  8
    2 2  5
    

    ...但是两个 DataFrame 之间的索引必须匹配:

    df1 = pd.DataFrame({'a':[1,2,2,1], 'b':[1,2,2,1]}, index=[2,5,6,8])
    print (df1)
       a  b
    2  1  1 <- matched only 2 index
    5  2  2
    6  2  2
    8  1  1
    
    df2 = pd.DataFrame({'c':[1,2,3,7]})
    print (df2)
       c
    0  1
    1  2
    2  3
    3  7
    
    df3 = df2.groupby([df1['a'], df1['b']]).sum()
    print (df3)
             c
    a   b     
    1.0 1.0  3
    

    【讨论】:

    • 啊,谢谢。是的,索引确实匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2018-04-04
    • 2022-07-08
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多