我有以下数据框:
df=pd.DataFrame({'code1':["A","B","A"],"code2":["k","l","k"],'Names':[['EUGENIO NETO','JUAN MATIAS SERAGOPIAN'],['EUGENIO LUPORINI NETO'],['SIMONE FANKHAUSER','ALEX SOUZA']]})
code1 code2 Names
0 A k [EUGENIO NETO, JUAN MATIAS SERAGOPIAN]
1 B l [EUGENIO LUPORINI NETO]
2 A k [SIMONE FANKHAUSER, ALEX SOUZA]
我想按code1
和code2
进行分组,并组合名称中的列表。在某种程度上,它看起来像这样:
code1 code2 Names
0 A k [EUGENIO NETO, JUAN MATIAS SERAGOPIAN, SIMONE FANKHAUSER, ALEX SOUZA]
1 B l [EUGENIO LUPORINI NETO]
已检查以下答案:
Groupby和append列表和字符串
pandas groupby和join列表
所以我试图根据我的情况调整这些问题的答案(但没有设法解决):
df['Names']=df[['code1','code2',"Names"]].groupby(['code1','code2'])["Names"].agg('sum')
----> ValueError: Function does not reduce
df['Names']=df[['code1','code2',"Names"]].groupby(['code1','code2'])["Names"].agg('Names')
----> AttributeError: 'SeriesGroupBy' object has no attribute 'Names'
df['Names']=df[['code1','code2',"Names"]].groupby(['code1','code2'])["Names"].transform(lambda x: append(x))
----> NameError: name 'append' is not defined
我是错过了什么还是错了?
编辑
Andrej和NYC Coder确实提出了功能性解决方案。但是当我在一个更大的数据集中运行时,我得到了相同的
ValueError: Function不会减少
。研究了这可能是什么,并在这里发现了这个问题:熊猫Groupby Agg函数不减少
选择的答案建议使用元组,因为列表是有问题的。另一个答案解释了熊猫代码中发生的情况。元组是最好的方法吗?如何在这里应用?
这应该可以做到:
df['Names'] = df['Names'].agg(lambda x: ','.join(map(str, x)))
df = df.groupby(by=['code1', 'code2'], as_index=False).agg('sum')
print(df)
code1 code2 Names
0 A k EUGENIO NETO,JUAN MATIAS SERAGOPIANSIMONE FANK...
1 B l EUGENIO LUPORINI NETO
print( df.groupby(['code1', 'code2'], as_index=False).agg('sum') )
打印:
code1 code2 Names
0 A k [EUGENIO NETO, JUAN MATIAS SERAGOPIAN, SIMONE ...
1 B l [EUGENIO LUPORINI NETO]
编辑:具有itertools.chain
的解决方案:
from itertools import chain
df=pd.DataFrame({'code1':["A","B","A"],"code2":["k","l","k"],'Names':[['EUGENIO NETO','JUAN MATIAS SERAGOPIAN'],['EUGENIO LUPORINI NETO'],['SIMONE FANKHAUSER','ALEX SOUZA']]})
print( df.groupby(['code1', 'code2'], as_index=False).agg(lambda x: list(chain.from_iterable(x))) )
有递归函数的问题,应该相对简单做,但似乎不能得到正确的。 我有一个文件夹结构,它的文件夹可以包含其他文件夹、图像或文件。每个文件夹都有权限。我想让我的函数递归地构建一个与每个文件夹关联的权限列表。 改了号, 得到:
我有问题,以简化我的代码与许多地图和列表。 我想填充3个列表,然后填充到匹配的地图。清空3个列表,并在下一个if条件中再次填充它们,然后将它们传递到匹配映射中。 有人知道我如何最好地实现这一点,从而减少列表的数量吗?谢谢你
我需要在Java8中迭代一个列表并将值追加到StringBuilder中。我已经编写了下面的代码,它正在工作,但是我需要使用map/stream等来迭代列表,而不是使用forEach循环。 我有另一个列表和地图,如果元素列表与地图的键匹配,我需要替换一个字符串。 如何使用Java8的map()/stream()等功能而不是forEach循环迭代相同的代码?
我有一个JSP代码将数据追加到datatables中,从另一个AJAX页面获得响应,当将数据追加到表中时,数据的追加非常奇怪。我将在下面展示它。 正确的数据应该是这样的: 从AJAX页面获取数据的JSP代码 下面是我将Array结果附加到DT中的JAVA代码 在控制台中,它显示正确,但在添加到表中时,它是错误的。
问题内容: 我正在使用Json.Net for .Net 4.5,并且在以下对象上使用填充对象时,它会使用json的内容而不是设置其值来增加List的值。 Json.Net 类 当它们最初加载时,一切都正确,但是从JSON重新加载两个MyStringLists都是重复的 问题答案: 您应该告诉Json.Net替换数组,如下所示:
我正在尝试添加选项到一个动态选择输入,依赖于在另一个选择下拉菜单中选择的值。 我已经设法在选择父级中的值时填充数据对象。所有的my触发器也会被执行,子select被禁用,它应该包含数据对象中的所有值,但是它没有填充任何选项。 JS(Coffeescript)代码段: 最后一节特别重要,因为这是JSON数据对象应转换为新选项的地方。下面是在一种情况下响应的对象(根据Firebug): 在本例中,儿童