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()
这将按数量对其进行分组。
添加回答
举报