为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

陪伴而非守候 2022-07-26 22:03:48
              Quantity  frequency0                  200        1581                 -200        1162                  500         853                 1000         624                  300         575                 -500         516                 -300         50我试图减去两个相同的频率并按频率abs(Quantity)更新column['frequency'] 和排序。输出:              Quantity  frequency0                 1000         621                  200         422                  500         343                  300          7...
查看完整描述

3 回答

?
catspeake

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


查看完整回答
反对 回复 2022-07-26
?
暮色呼如

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)


查看完整回答
反对 回复 2022-07-26
?
紫衣仙女

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

这将按数量对其进行分组。


查看完整回答
反对 回复 2022-07-26
  • 3 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号