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