虽然我知道如何根据某些数据(特别是关于this rock-solid answer的数据)获取特定行的信息,但我很难找到实现整个数据帧的最佳方法,希望不必遍历它。
我有“买入”和“卖出”交易的记录,都在同一个df中。触发每个“购买”事务的内容记录在保存“购买”事务的相应行中。我需要把这些信息复制到同等的“卖出”交易中。sell事务行包含"buy“事务的"ID”,后者是df的索引。
Type Trigger Buy ID
ID
11 buy AA ---
12 buy BB ---
13 sell --- 11
14 sell --- 12所以我想要创建一个新的列。( "BuyTrigger")并将触发器从"buy“事务添加到"sell”行。我尝试过的(除其他外):
df = data[data["Type"] == "sell"]
df["BuyTrigger"] = data.loc[df["Buy order ID"]]["Trigger"]上面,我用sell事务创建了一个数据片段的副本,只是为了使处理更快。购买,这是返回所有的NANs为“购买触发器”。
我只想说清楚:有两种数据格式。数据包含所有记录;DF只包含sell事务。
预期结果:
Type Trigger Buy ID BuyTrigger
ID
11 buy AA --- ---
12 buy BB --- ---
13 sell --- 11 AA
14 sell --- 12 BB我很感激你的帮助!
发布于 2021-03-13 02:05:16
您可以使用apply和df.loc来获得答案。我会这么做的。
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)这方面的产出如下:
Type Trigger Buy_ID BuyTrigger
ID
11 buy AA --- NaN
12 buy BB --- NaN
13 sell --- 11 AA
14 sell --- 12 BB与np.NaN不同,您还可以给出“-”。然后答案是:
Type Trigger Buy_ID BuyTrigger
ID
11 buy AA --- ---
12 buy BB --- ---
13 sell --- 11 AA
14 sell --- 12 BB发布于 2021-03-13 01:46:57
下面是一个代码片段,它应该能做您想做的事情:
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.
https://stackoverflow.com/questions/66609004
复制相似问题