Quantity frequency
0 200 158
1 -200 116
2 500 85
3 1000 62
4 300 57
5 -500 51
6 -300 50
我正在尝试减去两个具有相同abs(Quantity)
的频率,并更新column['frequency']
并按频率排序。
输出:
Quantity frequency
0 1000 62
1 200 42
2 500 34
3 300 7
...
答案 0 :(得分:1)
唯一的方式。
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
答案 1 :(得分:1)
这将产生您想要的结果:
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)
答案 2 :(得分:0)
您可以尝试以下代码段:
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()
这将按数量分组。