【问题标题】:pandas groupby dataframe 2 based on dataframe 1pandas groupby 数据帧 2 基于数据帧 1
【发布时间】:2020-06-15 19:11:42
【问题描述】:
data = {"Team": ["Red Sox", "Red Sox", "Red Sox", "Red Sox", "Red Sox", "Red Sox", "Yankees", 
                 "Yankees", "Yankees", "Yankees", "Yankees", "Yankees"],
        "Pos": ["Pitcher", "Pitcher", "Pitcher", "Not Pitcher", "Not Pitcher", "Not Pitcher", 
                "Pitcher", "Pitcher", "Pitcher", "Not Pitcher", "Not Pitcher", "Not Pitcher"],
        "Age": [24, 28, 40, 22, 29, 33, 31, 26, 21, 36, 25, 31]}
df1 = pd.DataFrame(data)

现在我使用以下代码按 2 列分组:

grouped_multiple = df1.groupby(['Team', 'Pos']).agg({'Age': ['mean', 'min', 'max']})
grouped_multiple.columns = ['age_mean', 'age_min', 'age_max']
grouped_multiple = grouped_multiple.reset_index()

现在我创建了第二个数据框,其中还有 3 列,长度相同,但只有数字作为值。 想象一下,数据帧 1 的每个单元都与数据帧 2 的相同位置单元链接。 当我对数据框 1 进行分组时 --> 我想获取数据框 2 的相应值

所以 df1 groupyby 第 1 列

["Red Sox", "Red Sox", "Red Sox", "Red Sox", "Red Sox", "Red Sox", "Yankees", 
 "Yankees", "Yankees", "Yankees", "Yankees", "Yankees"]

结果

["Red Sox", "Yankees"]

让我们说 df2 第 1 列看起来像

[1,2,4,3,2,3,4,5,3,5,6,7]

所以我想将 df2 的值 - 第 1 列 --> 在一个列表中,其中 df1 的相应索引取自每个“红袜队”和“洋基队”

喜欢

[[1,2,4,3,2,3][4,5,3,5,6,7]]

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    不确定grouped_multiple 的问题出在哪里,我认为如果 df1 和 df2 的长度相同,您可以这样做

    df2 = pd.DataFrame({'col1':[1,2,4,3,2,3,4,5,3,5,6,7]})
    s = df2['col1'].groupby(df1['Team']).agg(list)
    

    你得到

    print (s)
    Team
    Red Sox    [1, 2, 4, 3, 2, 3]
    Yankees    [4, 5, 3, 5, 6, 7]
    Name: col1, dtype: object
    

    或者如果你想要一个列表列表,那么

    l = s.tolist()
    print (l)
    [[1, 2, 4, 3, 2, 3], [4, 5, 3, 5, 6, 7]]
    

    如果你想对 df1 中的两列进行分组,那么你可以这样做

    df2['col1'].groupby([df1['Team'], df1['Pos']]).agg(list)
    Team     Pos        
    Red Sox  Not Pitcher    [3, 2, 3]
             Pitcher        [1, 2, 4]
    Yankees  Not Pitcher    [5, 6, 7]
             Pitcher        [4, 5, 3]
    

    【讨论】:

    • ty,这就是我要找的
    【解决方案2】:

    我有点不清楚您要做什么,但是如果您这样连接两个数据帧:

    newdf = pd.concat([df1, df2], axis=1)
    

    那么你可以做你的groupby 并用最后三列做必要的事情。

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多