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

时间:2020-02-14 04:36:05

标签: python pandas

              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
...

3 个答案:

答案 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()

这将按数量分组。