3 回答

TA貢獻1111條經驗 獲得超0個贊
一種方法。
a = abs(df.Quantity)
b = df[df.groupby(a)["frequency"].transform('count')>1]
c = df[df.groupby(a)["frequency"].transform('count')==1]
d = b.groupby(a)['frequency'].apply(lambda x: x.values[0]-x.values[-1]).reset_index()
d.append(c)
輸出
Quantity frequency
0 200 42
1 300 7
2 500 34
3 1000 62

TA貢獻1853條經驗 獲得超9個贊
這將產生您尋求的結果:
query = df.copy()
query["abs_quantity"] = query["Quantity"].abs()
abs_freq = pd.DataFrame(data=query.abs_quantity.value_counts()) \
.reset_index(level=0) \
.rename(columns={"index": "abs_quantity",
"abs_quantity": "abs_freq"})
results = query.merge(abs_freq, on="abs_quantity") \
.query("abs_freq == 1")[["Quantity", "frequency"]] \
.sort_values(by="frequency", ascending=False)

TA貢獻1839條經驗 獲得超15個贊
您可以嘗試以下代碼片段:
for index,row in df.iterrows():
if int(row["Quantity"])<0:
# Make all quantities as positive
row["Quantity"]=row["Quantity"]*-1
# Transfer the quantity sign to freq
row["Freq"]=row["Freq"]*-1
這將改變標志。
df.groupby(['Quantity']).sum()
這將按數量對其進行分組。
添加回答
舉報