我的第一個資料框:
import pandas as pd
df1 = pd.DataFrame({'CONTRACT':['Tom', 'nick', 'krish', 'jack'],
'buy_qty':[20, 40, 50, 60],
'buy_val':[100,120,140,160],
'factor':[15,20,25,30],
})
CONTRACT buy_qty buy_val factor
0 Tom 20 100 96
1 nick 40 110 93
2 krish 50 140 91
3 jack 60 160 83
第二個資料框:
df2 = pd.DataFrame({'CONTRACT': ['Tom', 'nick', 'amit', 'joy'],
'buy_qty': [5, 6, 15, 30],
'buy_val': [15, 20, 35, 16],
'factor': [67, 89, 76, 69]}
df2:
CONTRACT buy_qty buy_val factor
0 Tom 5 15 67
1 nick 6 20 89
2 amit 15 35 76
3 joy 30 16 69
我想要這樣的資料框(df2的所有CONTRACT值和df1的不常見CONTRACT值,通過添加常見的CONTRACTS的buy_qty和buy_val和因子將來自df2(最新資料框)......) -
CONTRACT buy_qty buy_val factor
0 Tom 25* 115* 67
1 nick 46* 130* 89
2 krish 50 140 91
4 jack 60 160 83
2 amit 15 35 76
3 joy 30 16 69
* denotes added values
我試過這樣-
final = pd.concat([df2, df1]).add(df1['buy_qty','buy_val'],df2['buy_qty','buy_val']).drop_duplicates(subset=["CONTRACT"]).reset_index(drop=True)
但它不能正常作業。
任何人都可以提出更好的方法嗎?
uj5u.com熱心網友回復:
與您之前的問題不同,在這里您必須這樣做,groupby因為您想aggregate在列上設定一些值:
buy_qty:sumbuy_val:sumfactor:first*
*first因為您想保留 df2 中的值,這是pd.concat.
out = (pd.concat([df2, df1]).groupby('CONTRACT', as_index=False)
.agg({'buy_qty': 'sum', 'buy_val': 'sum', 'factor': 'first'})
print(out)
# Output
CONTRACT buy_qty buy_val factor
0 Tom 25 115 67
1 amit 15 35 76
2 jack 60 160 83
3 joy 30 16 69
4 krish 50 140 91
5 nick 46 130 89
uj5u.com熱心網友回復:
您可以add使用fill_value=0:
(df1
.set_index('CONTRACT')
.add(df2.set_index('CONTRACT'), fill_value=0)
.reset_index()
)
輸出:
CONTRACT buy_qty buy_val factor
0 Tom 25.0 115.0 163.0
1 amit 15.0 35.0 76.0
2 jack 60.0 160.0 83.0
3 joy 30.0 16.0 69.0
4 krish 50.0 140.0 91.0
5 nick 46.0 130.0 182.0
uj5u.com熱心網友回復:
嘗試:
df3=pd.concat([df1,df2])
df3.groupby('CONTRACT').sum()
結果為:
buy_qty buy_val factor
CONTRACT
Tom 40 200 30
amit 50 140 25
jack 60 160 30
joy 60 160 30
krish 50 140 25
nick 80 240 40
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/481941.html
下一篇:安全密碼保護批次
