我正在尝试根据“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)
另一种可能很奇特的方法是,仅当 B
为 np 时才交换
A
和 C
值。南
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/