如何在Pandas Python中转换列中的行并执行操作

时间:2018-12-04 20:39:06

标签: python pandas dataframe

我有一个这样的熊猫数据框。

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中删除或过滤掉任何特定的列。

有人可以帮我吗?

2 个答案:

答案 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

这对我有用。如果您不想修改原始的“值”列,则可以创建一个新列,对其进行操作,然后有选择地在最后删除该列。