熊猫:在重复行时更改值

时间:2019-03-02 21:17:11

标签: python pandas

这是我的df:

import pandas as pd
import numpy as np

d = {'number': ['12A', '12B', '23A', '23B', '23B'],
     'code': ['Q1A', 'Q1A', 'Q1A', 'Q1A', 'Q1B'],
     'symbole': ['ABC', 'ABC', 'XYZ', 'XZY', 'GFD'],
     'qty': [-100, 100, -20, 20, 0]}
df = pd.DataFrame(data=d)
df

  number code symbole  qty
0    12A  Q1A     ABC -100
1    12B  Q1A     ABC  100
2    23A  Q1A     XYZ  -20
3    23B  Q1A     XZY   20
4    23B  Q1B     ABC   0

我做了基本的操作:

df = df.loc[df['code'] == 'Q1A']
df['new'] = np.where(df['qty'] > 0, 'buy', 'sell')
df['new2'] = 'cash'
df

  number code symbole  qty   new  new2
0    12A  Q1A     ABC -100  sell  cash
1    12B  Q1A     ABC  100   buy  cash
2    23A  Q1A     XYZ  -20  sell  cash
3    23B  Q1A     XZY   20   buy  cash

现在,我想在更改2个新列的值时重复每一行。

设置:

  1. 数量反比
  2. 如果出售,则以购买代替;如果购买,则以出售代替
  3. 如果使用现金,请替换为资产,如果使用资产,请替换为现金

所需的输出:

  number code symbole  qty   new  new2
0    12A  Q1A     ABC -100  sell  cash
0    12A  Q1A     ABC  100   buy  asset
1    12B  Q1A     ABC  100   buy  cash
1    12B  Q1A     ABC  -100 sell  asset

以此类推。

我似乎不知道该怎么做。 我写了一些操作,因为我认为如果可能的话,可能会有所帮助。

1 个答案:

答案 0 :(得分:1)

首先,执行df2 = df[:] # copy df to df2

qty

df2["qty"] = -df["qty"]

new

df2["new"] = ["buy" if ele  == "sell" else "sell" for ele in df["new"]]

new2

df2["new2"] = ["cash" if ele  == "asset" else "asset" for ele in df["new2"]]

现在,将它们串联起来

df = pd.concat([df, df2])

结果:

  number code symbole  qty   new   new2
0    12A  Q1A     ABC -100  sell   cash
1    12B  Q1A     ABC  100   buy   cash
2    23A  Q1A     XYZ  -20  sell   cash
3    23B  Q1A     XZY   20   buy   cash
0    12A  Q1A     ABC -100  sell  asset
1    12B  Q1A     ABC  100   buy  asset
2    23A  Q1A     XYZ  -20  sell  asset
3    23B  Q1A     XZY   20   buy  asset