gpt4 book ai didi

python - 根据 Pandas 数据框中列的值插入行

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:24 25 4
gpt4 key购买 nike

考虑 pandas 中的以下数据框

   date     action    price     
20150101 buy 10
20150102 buy 9
20150103 sell 11
20150104 sell 10
20150105 buy 8
20150106 sell 9

如果我想在“卖出”变为“买入”时添加行,并且插入的行只是前一行的副本,除了将“卖出”更改为“买入”,如下所示:

   date     action    price     
20150101 buy 10
20150102 buy 9
20150103 sell 11
20150104 sell 10
**20150104 buy 10**
20150105 buy 8
20150106 sell 9
**20150106 buy 9 **

感谢您的帮助。

最佳答案

您可以使用

识别转换行
mask = (df['action'] == 'sell') & (df['action'].shift(-1) != 'sell')
# In [229]: mask
# Out[229]:
# 0 False
# 1 False
# 2 False
# 3 True
# 4 False
# 5 True
# Name: action, dtype: bool

然后你可以创建一个新的 DataFrame,由 mask 为 True 的行组成:

new = df.loc[mask].copy()

将操作设置为“购买”:

new['action'] = 'buy'
# date action price
# 3 20150104 buy 10
# 5 20150106 buy 9

构建一个连接dfnew的新DataFrame:

df = pd.concat([df, new])

并按日期排序:

df = df.sort(['date'])

例如,

import pandas as pd
df = pd.read_table('data', sep='\s+')
mask = (df['action'] == 'sell') & (df['action'].shift(-1) != 'sell')
new = df.loc[mask].copy()
new['action'] = 'buy'
df = pd.concat([df, new])
df = df.sort(['date'])
df = df.reset_index(drop=True)
print(df)

产量

       date action  price
0 20150101 buy 10
1 20150102 buy 9
2 20150103 sell 11
3 20150104 sell 10
4 20150104 buy 10
5 20150105 buy 8
6 20150106 sell 9
7 20150106 buy 9

关于python - 根据 Pandas 数据框中列的值插入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30145357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com