这是我的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个新列的值时重复每一行。
设置:
所需的输出:
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
以此类推。
我似乎不知道该怎么做。 我写了一些操作,因为我认为如果可能的话,可能会有所帮助。
答案 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