[英]Pandas - How to subtract row values based on other columns?
輸入:
Symbol Type Value
0 AAPL BUY 400
1 AAPL SELL 310
2 INFY SELL 190
3 JSL BUY 120
4 JSW BUY 190
5 JSW SELL 170
6 REL BUY 110
7 TCS BUY 210
8 TCS SELL 200
期望輸出:
Symbol Type Value
0 AAPL BUY 90
2 INFY SELL 190
3 JSL BUY 120
4 JSW BUY 20
6 REL BUY 110
7 TCS BUY 10
我如何在熊貓中實現這個輸出? 我嘗試過 groupby 但它適用於 Value 列。 我想根據值的符號+類型減去行。 像 (Symbol+BUY->Value) 減去 (Symbol+Sell->Value)
讓我們試試
df.Value *= np.where(df.Type=='BUY', 1, -1)
out = df.groupby('Symbol', as_index=False).agg({'Type':'first','Value':'sum'})
out
Out[152]:
Symbol Type Value
0 AAPL BUY 90
1 INFY SELL -190
2 JSL BUY 120
3 JSW BUY 20
4 REL BUY 110
5 TCS BUY 10
如果需要將sell 轉換為pos
out.Value *= np.where(out.Type=='BUY', 1, -1)
out
Out[157]:
Symbol Type Value
0 AAPL BUY 90
1 INFY SELL 190
2 JSL BUY 120
3 JSW BUY 20
4 REL BUY 110
5 TCS BUY 10
df2 = df.pivot_table(index='Symbol', columns='Type', values='Value', aggfunc='sum').\
fillna(0).eval('Value = BUY - SELL').drop(columns=['BUY', 'SELL']).reset_index()
df2.insert(1,'Type', np.where(df2['Value'] > 0, "BUY", "SELL"))
df2['Value'] = abs(df2['Value'])
Type Symbol Type Value
0 AAPL BUY 90.0
1 INFY SELL 190.0
2 JSL BUY 120.0
3 JSW BUY 20.0
4 REL BUY 110.0
5 TCS BUY 10.0
我不知道這是否是最好的解決方案,但它絕對應該有效:
您可以使用 Numpy 將您的 Pandas 矩陣轉換為一個數組,通過該數組您可以遍歷、搜索值等。對於您的示例來說,擁有 Buy 類型的列和 Sell 類型的下一行減去(我希望我我在這里解決了你的問題,抱歉有任何誤解),你可以簡單地使用一個 for 循環來創建兩個數組,一個是 Sell 類型,一個是 Buy 類型,然后從第一個數組中減去 1 的值和值1 從第二個或類似的東西。 對於這個問題,它絕對不如其他答案好,至少在這種情況下不是,但我確實相信它在某些情況下可能會好得多,例如因為 numpy 可以讓您重塑數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.