首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一行中获取一个值,并根据当前行中包含的特定信息向当前行添加整个数据格式。

从另一行中获取一个值,并根据当前行中包含的特定信息向当前行添加整个数据格式。
EN

Stack Overflow用户
提问于 2021-03-13 00:45:15
回答 2查看 165关注 0票数 1

虽然我知道如何根据某些数据(特别是关于this rock-solid answer的数据)获取特定行的信息,但我很难找到实现整个数据帧的最佳方法,希望不必遍历它。

我有“买入”和“卖出”交易的记录,都在同一个df中。触发每个“购买”事务的内容记录在保存“购买”事务的相应行中。我需要把这些信息复制到同等的“卖出”交易中。sell事务行包含"buy“事务的"ID”,后者是df的索引。

代码语言:javascript
复制
     Type   Trigger   Buy ID
ID   
11   buy     AA       ---
12   buy     BB       ---
13   sell    ---      11
14   sell    ---      12

所以我想要创建一个新的列。( "BuyTrigger")并将触发器从"buy“事务添加到"sell”行。我尝试过的(除其他外):

代码语言:javascript
复制
df = data[data["Type"] == "sell"]
df["BuyTrigger"] = data.loc[df["Buy order ID"]]["Trigger"]

上面,我用sell事务创建了一个数据片段的副本,只是为了使处理更快。购买,这是返回所有的NANs为“购买触发器”。

我只想说清楚:有两种数据格式。数据包含所有记录;DF只包含sell事务。

预期结果:

代码语言:javascript
复制
     Type   Trigger   Buy ID  BuyTrigger
ID   
11   buy     AA       ---     --- 
12   buy     BB       ---     ---
13   sell    ---      11      AA
14   sell    ---      12      BB

我很感激你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-13 02:05:16

您可以使用apply和df.loc来获得答案。我会这么做的。

代码语言:javascript
复制
import pandas as pd
import numpy as np
df = pd.DataFrame({'ID':[11,12,13,14],
                   'Type':['buy','buy','sell','sell'],
                   'Trigger':['AA','BB','---','---'],
                   'Buy_ID':['---','---',11,12]}).set_index('ID')
df["BuyTrigger"] = df['Buy_ID'].apply(lambda x: df.loc[x,'Trigger'] if x != '---' else np.NaN)
print (df)

这方面的产出如下:

代码语言:javascript
复制
    Type Trigger Buy_ID BuyTrigger
ID                                
11   buy      AA    ---        NaN
12   buy      BB    ---        NaN
13  sell     ---     11         AA
14  sell     ---     12         BB

与np.NaN不同,您还可以给出“-”。然后答案是:

代码语言:javascript
复制
    Type Trigger Buy_ID BuyTrigger
ID                                
11   buy      AA    ---        ---
12   buy      BB    ---        ---
13  sell     ---     11         AA
14  sell     ---     12         BB
票数 1
EN

Stack Overflow用户

发布于 2021-03-13 01:46:57

下面是一个代码片段,它应该能做您想做的事情:

代码语言:javascript
复制
import pandas as pd

def handle(data):
    buy = data[data["Type"]=="buy"][["ID", "Trigger"]]
    df = data.merge(buy, left_on="Buy ID", right_on="ID", how="left", suffixes=("", "_"))
    df = df.drop(["ID_"], axis=1).rename(columns={"Trigger_": "BuyTrigger"})
    return df

data = pd.DataFrame({
    "ID": [11,12,13,14],
    "Type": ["buy", "buy", "sell", "sell"],
    "Trigger": ["AA", "BB", "", ""],
    "Buy ID": ["", "", 11, 12]
})
result = handle(data)

它的工作方式是:

选择包含购买information.

  • Merging的行
  1. 表,为每个buy.
  2. Deleting/renaming查找相应的sell,这些列与您的描述一致。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66609004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档