【问题标题】:How to convert rows in columns in pandas python and perform operation如何在pandas python中转换列中的行并执行操作
【发布时间】:2018-12-04 20:39:05
【问题描述】:

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

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

谁能帮我解决这个问题?

【问题讨论】:

  • 我不明白您为什么在预期输出中添加一些并减去其他一些。无论哪种方式,这看起来更像是 groupby 而不是 pivot
  • @user3483203 这取决于交易者的头寸。如果他买入 2 卖出 2 行使价,那么要获得最终金额,我需要加 2 并减去 2。

标签: python pandas dataframe


【解决方案1】:

给定

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

【讨论】:

  • 谢谢 timgeb。它按预期工作。欣赏你的努力。我在同一行还有一个问题。我们可以通过strike_price本身而不是s[1::2].sum()吗?为什么我问是因为我可以写一个更通用的函数。
  • @DeveshAgrawal 没问题。我不太确定“通过strike_price 本身”是什么意思。评论部分并不是讨论后续问题的好地方,但请随时提出新问题(确保准确解释您需要什么),我会看看它。
【解决方案2】:

一种解决方案是将“值”的奇数行乘以 -1:

df.value.iloc[1::2] *= -1

然后做一个 groupby 和 sum:

df.groupby('Date').sum()

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

【讨论】:

  • 这不考虑不同长度组(或奇数组)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 2017-08-09
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 2015-09-12
相关资源
最近更新 更多