Pandas-基于2个列和一个单独的测试列创建2个新列[英] Pandas - creating 2 new columns based on 2 columns and a separate test column

本文是小编为大家收集整理的关于Pandas-基于2个列和一个单独的测试列创建2个新列的处理方法,想解了Pandas-基于2个列和一个单独的测试列创建2个新列的问题怎么解决?Pandas-基于2个列和一个单独的测试列创建2个新列问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在尝试根据另一列的值从 2 个现有列中填充 2 个新列.

逻辑是,给定一个正数,买方和卖方应分别从 party 和 cparty 字段中填写.如果金额为负,则情况相反,买方是当事人而不是当事人,卖方是当事人.

我试图避免做一些迭代的事情——我可以使用下面的表达式来获取每个组件,但是尝试将这些结果与 concat、+、+=、combine_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)

本文地址:https://www.itbaoku.cn/post/1727838.html