Python 如何根据其他列上的条件用另一列的值填充列?

Python 如何根据其他列上的条件用另一列的值填充列?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,假设熊猫中有一个数据帧,如下所示: col1 | col2 | col3 | col4 22 | Nan | 23 | 56 12 | 54 | 22 | 36 48 | Nan | 2 | 45 76 | 32 | 13 | 6 23 | Nan | 43 | 8 67 | 54 | 56 | 64 16 | 32 | 32 | 6 3 | 54 | 64 | 8 67 | 4

假设熊猫中有一个数据帧,如下所示:

col1 | col2 | col3 | col4 
22   | Nan  | 23   |  56
12   |  54  | 22   |  36
48   | Nan  | 2    |  45
76   | 32   | 13   |  6
23   | Nan  | 43   |  8
67   | 54   | 56   |  64
16   | 32   | 32   |  6
3    | 54   | 64   |  8
67   | 4    | 23   |  64

如果
col4未测试,我想用
col1
替换
col4
的值,但如何

df[(df['col4'] < df['col1']) & (pd.notnull(df['col2'])), 'col4'] = df['col1']
df[(df['col4']
使用以下方法:

df.loc[(df['col1']>df['col4'])&(df['col2'].notnull()),'col4']=df['col1']
现在:

print(df)
是:


下面是一个经过验证的解决方案:

idx_ = df[(df['col4'] < df['col1']) & (pd.notnull(df['col2']))].index
df.loc[idx_,'col4'] = df['col1']
df


+---+------+------+------+------+
|   | col1 | col2 | col3 | col4 |
+---+------+------+------+------+
| 0 |   22 | NaN  |   23 |   56 |
| 1 |   12 | 54.0 |   22 |   36 |
| 2 |   48 | NaN  |    2 |   45 |
| 3 |   76 | 32.0 |   13 |   76 |
| 4 |   23 | NaN  |   43 |    8 |
| 5 |   67 | 54.0 |   56 |   67 |
| 6 |   16 | 32.0 |   32 |   16 |
| 7 |    3 | 54.0 |   64 |    8 |
| 8 |   67 | 4.0  |   23 |   67 |
+---+------+------+------+------+
idx=df[(df['col4']
这里有一点逻辑,我将其更改为更清晰的方式来解决您的问题

df['col4'].update(df.loc[df.col2.notna(),['col1','col4']].max(1))
df
   col1 col2  col3  col4
0    22  NaN    23    56
1    12   54    22    36
2    48  NaN     2    45
3    76   32    13    76
4    23  NaN    43     8
5    67   54    56    67
6    16   32    32    16
7     3   54    64     8
8    67    4    23    67

由于pandas是索引敏感型的,所以您需要.values assignmentdf.loc[idx_u2;,'col4']=df['col1']您好,谢谢您的回答,您知道如何在pyspark@user2356563没有关于Pypark的线索我还有一个问题,你怎么把你的桌子写得这么整齐?嗨,谢谢你的回答,你知道如何在Pyparkhi上这样做吗谢谢你的回答,你知道如何在Pyparkhi上这样做吗pyspark@user2356563不幸的是,我对pyspark一无所知,我对它一无所知,所以也许应该问其他人,或者问一个新问题。谢谢anyway@user2356563:-)我还有一个问题,你怎么把你的桌子写得这么整齐?嗨@W-B,你能告诉我怎么把你的桌子写得这么整齐吗?
   col1  col2  col3  col4
0    22   NaN    23    56
1    12  54.0    22    36
2    48   NaN     2    45
3    76  32.0    13    76
4    23   NaN    43     8
5    67  54.0    56    67
6    16  32.0    32    16
7     3  54.0    64     8
8    67   4.0    23    67
idx_ = df[(df['col4'] < df['col1']) & (pd.notnull(df['col2']))].index
df.loc[idx_,'col4'] = df['col1']
df


+---+------+------+------+------+
|   | col1 | col2 | col3 | col4 |
+---+------+------+------+------+
| 0 |   22 | NaN  |   23 |   56 |
| 1 |   12 | 54.0 |   22 |   36 |
| 2 |   48 | NaN  |    2 |   45 |
| 3 |   76 | 32.0 |   13 |   76 |
| 4 |   23 | NaN  |   43 |    8 |
| 5 |   67 | 54.0 |   56 |   67 |
| 6 |   16 | 32.0 |   32 |   16 |
| 7 |    3 | 54.0 |   64 |    8 |
| 8 |   67 | 4.0  |   23 |   67 |
+---+------+------+------+------+
df['col4'].update(df.loc[df.col2.notna(),['col1','col4']].max(1))
df
   col1 col2  col3  col4
0    22  NaN    23    56
1    12   54    22    36
2    48  NaN     2    45
3    76   32    13    76
4    23  NaN    43     8
5    67   54    56    67
6    16   32    32    16
7     3   54    64     8
8    67    4    23    67