首页 > 解决方案 > 在 Pandas 中,使用由列表列表过滤的数据创建一个新的数据框

问题描述

所以,我环顾四周,我一直无法找到这个问题的答案。如果它确实在那里,我很抱歉。

我有一个看起来像这样的 DF:

a = pd.DataFrame({'Name': ['apple', 'banana', 'orange', 'apple', 'banana','orange'], 
                  'Units': [2,4,6,5,4,3]})

我也有一个这样的列表列表:

b = [['apple', 'banana'],['orange']]

目标是将苹果和香蕉分成一列,将橙子分成另一列,并将它们各自的单位相加。列中的变量将显示为子列表中的第一项。(没有子列表会有重复)。

这是我希望输出 df 的样子:

output = pd.DataFrame({'Name': ['apple', 'orange'],
               'Units': [15, 9]})

这是我现在的位置:

for fruit in a['Name']:
for sublist in b:
    if fruit in sublist:
        pd.concat([XYZ,
                   pd.DataFrame({'Name': sublist[0], 'Units': a[a.Name == fruit]['Units'].sum(), index=[0})], 
                  axis=1)

XYZ 是一个空数据框,其中包含我试图用结果填充的列 = 名称和单位。当水果及其单位的总和位于子列表中时,我真的不明白如何创建数据框。

有什么想法吗?:D

编辑:子列表可以是 1 到 300 个项目。这里的代码只是一个更大的数据争论问题的 MWE。很抱歉没有提到这一点。

标签: pythonpandas

解决方案


事实上,你可以在一行中做到这一点:

sum_a = a.replace({"banana": "apple"}).groupby("Name", as_index=False).sum()

推荐阅读