熊猫合并(减去)具有相同绝对值的两行

              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

...


陪伴而非守候
浏览 188回答 3
3回答

catspeake

一种方法。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    frequency0   200     421   300     72   500     343   1000    62

暮色呼如

这将产生您寻求的结果: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)

紫衣仙女

您可以尝试以下代码片段:for index,row in df.iterrows():if int(row["Quantity"])<0:&nbsp; &nbsp; # Make all quantities as positive&nbsp; &nbsp; row["Quantity"]=row["Quantity"]*-1&nbsp; &nbsp; # Transfer the quantity sign to freq&nbsp; &nbsp; row["Freq"]=row["Freq"]*-1这将改变标志。df.groupby(['Quantity']).sum()这将按数量对其进行分组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python