我有一个记录的 DataFrame,看起来像这样:
stocks = pd.Series(['A', 'A', 'B', 'C', 'C'], name = 'stock')
positions = pd.Series([ 100, 200, 300, 400, 500], name = 'positions')
same1 = pd.Series(['AA', 'AA', 'BB', 'CC', 'CC'], name = 'same1')
same2 = pd.Series(['AAA', 'AAA', 'BBB', 'CCC', 'CCC'], name = 'same2')
diff = pd.Series(['A1', 'A2', 'B3' ,'C1', 'C2'], name = 'different')
df = pd.DataFrame([stocks, same1, positions, same2, diff]).T
df
这给出了一个看起来像的 pandas DataFrame
stock same1 positions same2 different
0 A AA 100 AAA A1
1 A AA 200 AAA A2
2 B BB 300 BBB B3
3 C CC 400 CCC C1
4 C CC 500 CCC C2
我对“不同”列中的数据不感兴趣,并且想对其他唯一列的位置求和。我目前正在这样做:
df.groupby(['stock','same1','same2'])['positions'].sum()
这使:
stock same1 same2
A AA AAA 300
B BB BBB 300
C CC CCC 900
Name: positions
问题是这是一个 pd.Series (带有多索引)。目前我对其进行迭代以再次构建 DataFrame。我确定我缺少一种方法。基本上我想从 DataFrame 中删除 1 列,然后“重建它”,以便对一列求和,其余字段(相同)保持原位。
如果有空仓,这个 groupby 方法就会中断。所以我目前在 DataFrame 上使用了一个精心的迭代来构建一个新的。有更好的方法吗?