python 如何在给定条件下用Pandas Dataframe 中的另一列替换一列的值

kyxcudwk  于 2023-01-24  发布在  Python
关注(0)|答案(4)|浏览(173)

我有一个Pandas数据框:
| 第1栏|第2栏|
| - ------|- ------|
| 无|四个|
| 第二章|五个|
| 无|第二章|
| 无|1个|
| 五个|七|
| 无|五个|
我想用对应的第2列值替换第1列值。但只有当第1列值= 0时,才应替换该值。一旦列值被替换,被替换的值应变为零。基本上,我想交换这些值。
预期输出应为:
| 第1栏|第2栏|
| - ------|- ------|
| 四个|无|
| 第二章|五个|
| 第二章|无|
| 1个|无|
| 五个|七|
| 五个|无|
请帮助代码。

wj8zmpe1

wj8zmpe11#

使用布尔索引:

# identify rows to swap 
m = df['Col 1'].eq(0)

# swap values
df.loc[m, ['Col 1', 'Col 2']] = df.loc[m, ['Col 2', 'Col 1']].to_numpy()

更新数据框:

Col 1  Col 2
0      4      0
1      2      5
2      2      0
3      1      0
4      5      7
5      5      0
zbdgwd5y

zbdgwd5y2#

df['Col 1']=df.apply(lambda row: row['Col 2'] if row['Col 1']==0 else row['Col 1'],axis=1)
df
Out[255]: 
   Col 1  Col 2
0     4     4
1     2     5
2     2     2
3     1     1
4     5     7
5     5     5
xqk2d5yq

xqk2d5yq3#

您可以使用mask

# Columns to swap on condition
cols = ['Col 1', 'Col 2']
cond = df['Col 1'] == 0

df[cols] = df[cols].mask(cond, other=df[cols[::-1]].to_numpy())

输出:
| 第1栏|第2栏|
| - ------|- ------|
| 四个|无|
| 第二章|五个|
| 第二章|无|
| 1个|无|
| 五个|七|
| 五个|无|

1bqhqjot

1bqhqjot4#

我们可以使用Numpy where在两列之间交换值。

# Importing Modules
import pandas as pd
import numpy as np

# Creating DataFrame
df = pd.DataFrame({'col1': [0, 2, 0, 0, 5, 0], 'col2':[4, 5, 2, 1, 7, 5]})

# Swaping values between two columns based on the condition
df['col1'],df['col2']=np.where(df['col1']==0,(df['col2'],df['col1']),(df['col1'],df['col2']))

最终输出

col1 col2
0   4   0
1   2   5
2   2   0
3   1   0
4   5   7
5   5   0

相关问题