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

标签 python pandas dataframe

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

构建一个新的 DataFrame,连接 dfnew:

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/

相关文章:

python - 你知道在 Qt Creator 中集成 PySide/PyQt 开发的任何努力吗?

python - 返回跳过 Pandas 中的 nan 值的排序索引?

python - 更改 Pandas Dataframe 中的列值以将数字显示为百万

python - 在numpy中找到n个点到m个点之间的平方距离

python - 如何在snmp信息中查找eth0设备的信息?

python - 将正则表达式匹配附加到字典

python - 连接数据帧而不加倍索引

python - 在 Pandas 中查找相同连续元素的 block (及其大小)

python - 将具有重复键的嵌套 JSON 文件转换为 Python 中的数据框

python - 将 nan 转换为 NaN 有多大用处?