python - 比较因子变量每个级别的数据帧的两个连续行的值 - Python Pandas

标签 python pandas dataframe time-series comparison

我有一个 pandas 数据框,其中包含交易者随时间变化的头寸,我创建的数据框如下:

history = pd.read_csv(r"history.csv")
history = DataFrame(history, columns=['Symbol', 'Size', 'Entry Price',
                                            'Mark Price', 'PNL (ROE %)', 'Last Position Update'])
frames = [historylast, history]
history = pd.concat(frames)
positions = historylast['Symbol'].tolist()
historylast_symbol_set = set(positions)

其中historylast是包含当前仓位的最后抓取的数据库,history是包含先前仓位的本地副本。这是结果:

history = history.sort_values('Symbol')
print (history)
      Symbol         Size  ...    PNL (ROE %)  Last Position Update
0    BNBUSDT      250.800  ...    7702.095588   2021-05-01 03:12:09
5    BNBUSDT     1000.800  ...   43351.359565   2021-04-29 03:51:41
0    BTCUSDT       54.422  ...  513277.155788   2021-04-25 21:03:13
0    BTCUSDT       54.422  ...  328896.563684   2021-04-25 21:03:13
1   DOGEUSDT  2600000.000  ...   46896.408000   2021-05-01 08:24:51

该数据框是通过将交易者随时间的持仓情况汇总而创建的。 我想做的是查看每枚硬币的最后可用“尺寸”是否相对于前一枚发生了变化。例如,对于 BNBUSDT,上次大小为 250,相对于上次大小 1000 减少了 75%。对于 BTCUSDT,自上次大小以来,大小没有变化。而DOGEUSDT则没有之前的数据可以比较,所以仍然是100%买入仓位。

为了实现这一目标,我虽然应该将数据帧拆分为不同的数据帧,每个符号一个数据帧,并使用 for 循环计算和保存百分比变化,但我遇到了困难,并且想知道是否没有更好的方法。任何帮助将不胜感激

最佳答案

以以下 df 为例(也将使用列名称 SymbolSize)

import pandas as pd 

d = {'Symbol': ["A", "C", "A", "B", "A", "B", "A"], 'Size': [1, 1, 2, 3, 4, 5, 4]}
df = pd.DataFrame(data=d) 

print(df) 
>>>>  Symbol  Size
  0      A     1
  1      C     1
  2      A     2
  3      B     3
  4      A     4
  5      B     5
  6      A     4 

要检索每个符号的最后两行,请执行以下操作

g = df.groupby('Symbol').head(2)
g = g.sort_values('Symbol').reset_index(drop=True)

print(g)
>>>   Symbol  Size
   0      A     1
   1      A     2
   2      B     3
   3      B     5
   4      C     1

之后,为了计算相应组的每个尺寸之间的差异,假设该更改的值是相关的,请创建一个新列来显示该差异

g['Difference'] = g.groupby('Symbol').diff()

print(g)
>>>   Symbol  Size  Difference
 0      A     1         NaN
 1      A     2         1.0
 2      B     3         NaN
 3      B     5         2.0
 4      C     1         NaN 

请注意,第一个元素显示为 NaN,因为它没有更改。

关于python - 比较因子变量每个级别的数据帧的两个连续行的值 - Python Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67346468/

相关文章:

r - 如何将新的计算变量添加到数据框中

python - CNTK:如何获取C++-API中的类概率?

使用 Tkinter 的带有 GUI 的 Python 扫雷游戏如何正确显示在按钮上?

python - 更改数据框副本中的值会更改原始数据框本身

python - 满足条件后使用 pandas 删除组中的所有观察结果

python - 如何根据列前缀拆分 pandas 数据框

python - 对数据帧列前一行和两列的乘积求和

python - 如何使用 Python 测试 API 客户端?

python - 如何从Excel获取字典的多个键和单个值

python - 拆分数据框列,其中 dtype 是 Object 但里面有 list ,如何拆分?