我在某种简单的问题上苦苦挣扎。希望有一个简单的解决方案。我的数据框看起来像这样。

DataFrame:
8 buy  4
7 sell 1
6 buy  1
5 sell 3
4 sell 10
3 buy  100
2 buy  110
1 buy  120


有没有办法添加相继出现的相同订单?因此,将df转换为:

DataFrame:
8 buy  4
7 sell 1
6 buy  1
4 sell 3 + 10
1 buy  100 + 110 + 120


我的问题有点复杂。我认为可以通过迭代来解决,但希望有一个更简单的解决方案。

最佳答案

agggroupby一起使用

df.groupby((df.b!=df.b.shift()).ne(0).cumsum()).agg({'a':'last','c':lambda x : '+'.join(x.astype(str)),'b':'first'})
Out[1227]:
   a            c     b
b
1  8            4   buy
2  7            1  sell
3  6            1   buy
4  4         3+10  sell
5  1  100+110+120   buy


数据输入 :

df
Out[1228]:
   a     b    c
0  8   buy    4
1  7  sell    1
2  6   buy    1
3  5  sell    3
4  4  sell   10
5  3   buy  100
6  2   buy  110
7  1   buy  120


更多信息 :

(df.b!=df.b.shift()).ne(0).cumsum()
Out[1229]:
0    1
1    2
2    3
3    4
4    4
5    5
6    5
7    5
Name: b, dtype: int32

关于python - Pandas 数据框基于键减少/添加行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47780312/

10-11 05:52