python - 在 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。很抱歉没有提到这一点。
解决方案
事实上,你可以在一行中做到这一点:
sum_a = a.replace({"banana": "apple"}).groupby("Name", as_index=False).sum()
推荐阅读
- azure-active-directory - Azure AD 密码保护 - 可用于非 Microsoft 目录?
- javascript - 在windows上编译nodeJs项目
- numpy - 使用 numpy 提高 FOR 循环性能
- user-interface - 如何准确命名 UI 组件?
- python - 使用 setup.py 脚本安装时找不到 PyQt5.sip 模块
- typescript - Jest 在使用 Material UI 中的 TextField 时遇到了意外的令牌
- flutter - 使用 Flutter DateTime 和 Timer 时遇到不一致的行为
- wordpress - 从重定向中排除文件夹
- javascript - 如何在谷歌翻译器中设置默认语言?
- javascript - 检查字符串数组中出现哪些关键字(10k 个单词)的最有效方法?