我有一个这样的熊猫数据框。
Date Strike_price value
1/1/18 10000 55
1/1/18 10100 40
1/1/18 10200 37
1/1/18 10300 25
2/1/18 10000 52
2/1/18 10100 38
2/1/18 10200 33
2/1/18 10300 21
3/1/18 10000 58
3/1/18 10100 43
3/1/18 10200 39
3/1/18 10300 26
我想以此创建一个新的数据框:
1/1/18 27 # 27 == 55 - 40 + 37 - 25
2/1/18 26
3/1/18 28
我尝试使用df.pivot_table('value', ['Date'], 'Strike_Price')
,它将行权价格转换为列,但是后来我无法从DF中删除或过滤掉任何特定的列。
有人可以帮我吗?
答案 0 :(得分:2)
给予
>>> df
Date Strike_price value
0 1/1/18 10000 55
1 1/1/18 10100 40
2 1/1/18 10200 37
3 1/1/18 10300 25
4 2/1/18 10000 52
5 2/1/18 10100 38
6 2/1/18 10200 33
7 2/1/18 10300 21
8 3/1/18 10000 58
9 3/1/18 10100 43
10 3/1/18 10200 39
11 3/1/18 10300 26
您可以发布
>>> df.groupby('Date')['value'].agg(lambda s: s[::2].sum() - s[1::2].sum())
Date
1/1/18 27
2/1/18 26
3/1/18 28
Name: value, dtype: int64
或者,您可能更喜欢
>>> df.groupby('Date', as_index=False)['value'].agg(lambda s: s[::2].sum() - s[1::2].sum())
Date value
0 1/1/18 27
1 2/1/18 26
2 3/1/18 28
答案 1 :(得分:-1)
一种解决方案是将“值”的奇数行乘以-1:
param1.prop1
然后进行分组和求和:
df.value.iloc[1::2] *= -1
这对我有用。如果您不想修改原始的“值”列,则可以创建一个新列,对其进行操作,然后有选择地在最后删除该列。