【问题标题】:Copy and Paste Values Based on a Condition in Python在 Python 中根据条件复制和粘贴值
【发布时间】:2019-01-01 12:00:39
【问题描述】:

我正在尝试根据“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)

【问题讨论】:

  • A 中删除值是什么意思?将其设置为nan ?
  • @HarvIpan 很抱歉造成混乱。我想用'nan'替换当前值。但只有粘贴在“C”列中的值。我已经更新了上面显示的输出。

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


【解决方案1】:

看来你需要

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

一种不同的,也许是奇特的方法是仅在 Bnp.nan 时交换 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)

【讨论】:

  • 感谢@RafaelC 和 Harvlpan 的快速响应。我收到一个错误。 ValueError:对于参数“就地”预期类型 bool,接收类型 DataFrame
  • 我没有在任何地方使用参数inplace.. 但看起来你正在使用inplace=df,但你可能想要inplace=True
  • 在之前的代码中,我有 inplace = True,但不是您提供的代码。我所做的唯一更改是重命名数据框和列。
  • 我已经尝试了第二个代码,我收到以下错误:无法使用多维键进行索引
  • 感谢您的努力。我以前的代码一定有问题导致它现在出错。我得玩一会儿。再次感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多