python-3.x - 根据 Python 中的条件复制并粘贴值

标签 python-3.x pandas if-statement conditional-statements copy-paste

我正在尝试根据“B”列中的条件使用“A”列中的值填充“C”列。示例:如果“B”列等于“nan”,则“C”列下的行等于“A”列中的行。如果“B”列不等于“nan”,则保留“C”列不变(即“nan”)。接下来,要删除“A”列中的值(仅从 A 列复制到 C 列的值)。

原始数据集:

index   A   B    C
0       6   nan  nan
1       6   nan  nan
2       9   3    nan
3       9   3    nan
4       2   8    nan
5       2   8    nan
6       3   4    nan
7       3   nan  nan
8       4   nan  nan

输出:

index   A   B    C
0       nan nan  6
1       nan nan  6
2       9   3    nan
3       9   3    nan
4       2   8    nan
5       2   8    nan
6       3   4    nan
7       nan nan  3
8       nan nan  4

下面是我迄今为止尝试过的方法,但它不起作用。

def impute_unit(cols):
    Legal_Block = cols[0]
    Legal_Lot = cols[1]
    Legal_Unit = cols[2]

    if pd.isnull(Legal_Lot):
       return 3
    else:
       return Legal_Unit

bk_Final_tax['Legal_Unit'] = bk_Final_tax[['Legal_Block', 'Legal_Lot', 
                          'Legal_Unit']].apply(impute_unit, axis = 1)

最佳答案

看来你需要

df['C'] = np.where(df.B.isna(), df.A, df.C)
df['A'] = np.where(df.B.isna(), np.nan, df.A)

另一种可能很奇特的方法是,仅当 Bnp 时才交换 AC 值。南

m = df.B.isna()
df.loc[m, ['A', 'C']] = df.loc[m, ['C', 'A']].values

换句话说,改变

bk_Final_tax['Legal_Unit'] = bk_Final_tax[['Legal_Block', 'Legal_Lot', 
                      'Legal_Unit']].apply(impute_unit, axis = 1)

对于

bk_Final_tax['Legal_Unit'] = np.where(df.Legal_Lot.isna(), df.Legal_Block, df.Legal_Unit)
bk_Final_tax['Legal_Block'] = np.where(df.Legal_Lot.isna(), np.nan, df.Legal_Block)

关于python-3.x - 根据 Python 中的条件复制并粘贴值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51505810/

相关文章:

python - 创建一个计数器,迭代数据帧中的列,并在满足列中的条件时进行计数

python-3.x - 应用通用函数 (x,y) 从两个现有列创建一个新列,以便我可以在不同列中使用该函数

c++ - 有没有比使用 "if"更快/更短的方式在 C++ 中进行这些测试?

r - r data.table 中所有行的条件总和输出

在此代码中找不到正确的输出

python - 如何在 Python 中模拟实例方法

python - 使用 BeautifulSoup 提取 CData

python - 如何选择除一列的最后一行以外的行?

Python 安装工具根据通用命名约定规范版本名称

python-3.x - 将函数动态添加到类并使其成为绑定(bind)方法