我有一个测试数据框,如下所示

test
Out[93]:
  ID1 ID2  Value sometext1 sometext2
0   A   A     22     hello       bla
1   B   A     44     hello       bla
2   C   B     77     hello       bla
3   A   B     44     hello       bla
4   B   C     33     hello       bla
5   C   C     66     hello       bla


test_grouped=test.groupby(['ID1','ID2']).sum().reset_index()

test_grouped
Out[97]:
  ID1 ID2  Value
0   A   A     22
1   A   B     44
2   B   A     44
3   B   C     33
4   C   B     77
5   C   C     66

我的问题如下:
有没有办法让sometext1和sometext2的值也分组到test_中,而不必进行合并?我可以用groupby语句直接完成这个任务吗?问题很明显,sometext1和sometext2不能相加。但在我的例子中,它们总是包含相同的值,所以毫无疑问它应该具有哪个值,因为它总是hello或bla。

最佳答案

如果您知道对于给定的ID1和ID2集合,sometext1和sometext 2将始终相同,那么您可以执行以下操作。

test_grouped = test.groupby(['ID1','ID2','sometext1','sometext2']).sum().reset_index()

以上是一个清晰、简单的解决方案,但是它不被认为是最佳实践,因为在您出错的可能性很小的情况下(对于同一组ID1和ID2,sometext1和sometext2可能不同),然后您为ID1和ID2创建重复的条目。如果这可能是一个问题,你可以采取一些方法,取决于你想如何处理它,但我相信你需要合并在任何情况下。例如,对于给定的ID1和ID2集,可以取sometext1的最大值。或者可以收集sometext1的所有值并将其存储为数组。

关于python - Pandas groupby带有不应该加总的文本项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35303674/

10-12 18:29