[英]Pandas - creating 2 new columns based on 2 columns and a separate test column
我正在尝试根据另一列的值填充2个现有列中的2个新列。
逻辑是,给定正数,应分别从“方”和“方”字段填写买方和卖方。 如果金额为负,则情况会相反,并且买方是当事人而不是当事人,卖方是当事人。
我试图避免做一些迭代-我可以使用下面的表达式获取每个组件,但是,尝试将这些结果与concat,+,+ =,combin_first,fillna和update串联在一起之后,我在如何进行绘制上做了一个空白合并结果。
每次它们要么被覆盖(我怀疑是因为Pandas匹配列名而不是位置),或者我得到2个空列。
必须有一个很好的干净的pythonic方式来组合以下内容或类似内容?
df[['Buyer', 'Seller']] = df[df.amount > 0][['party', 'cparty']]
df[['Buyer', 'Seller']] = df[df.amount < 0][['cparty', 'party']]
也许您正在寻找np.where
作为一个班轮,即
例如 :
df = pd.DataFrame({'key': ['a','b','b','c','c'],'key2': ['a','d','d','e','e'],'key3': ['j','k','l','m','n'], 'x': [1,2,3,4,5]})
df[['new1','new2']] = pd.DataFrame(np.where(df['x']>2,(df['key3'],df['key2']),(df['key2'],df['key3'])).T)
key key2 key3 x new1 new2
0 a a j 1 a j
1 b d k 2 d k
2 b d l 3 l d
3 c e m 4 m e
4 c e n 5 n e
在你的情况下你可以做
df[['Buyer', 'Seller']] = pd.DataFrame(np.where(df.amount < 0,(df['cparty'],df['party']),(df['party'],df['cparty'])).T)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.