[英]Replacing Values in a pandas Dataframe based on several conditions
我有以下數據框:
+----+----+---------+----------+
| |A | B | C |
|----+----+---------+----------|
| 0 |S | nan | 5464.5 |
| 1 |A | 5464.5 | 5464.5 |
| 2 |A | 5675.5 | nan |
| 3 |S | 5670 | nan |
| 4 |A | 5664 | nan |
| 5 |B | 5635.5 | nan |
| 6 |D | 5624 | nan |
| 7 |C | 5624 | nan |
| 8 |X | nan | 5464.5 |
| 9 |C | 5715.5 | nan |
| 10 |D | 4704 | 5000 |
+----+----+---------+----------+
我想用以下條件替換B中的nan值和B <5000中的值:如果A列為'S',則如果A列為'X'則應替換為C列,如果A列為'X'則應替換為C + 10列A列為“ D”,應將其替換為C-10列
因此結果應如下所示:
+----+----+---------+----------+
| |A | B | C |
|----+----+---------+----------|
| 0 |S | 5464.5 | 5464.5 |
| 1 |A | 5464.5 | 5464.5 |
| 2 |A | 5675.5 | nan |
| 3 |S | 5670 | nan |
| 4 |A | 5664 | nan |
| 5 |B | 5635.5 | nan |
| 6 |D | 5624 | nan |
| 7 |C | 5624 | nan |
| 8 |X | 5474.5 | 5464.5 |
| 9 |C | 5715.5 | nan |
| 10 |D | 4704 | 4990 |
+----+----+---------+----------+
解決此問題的最優雅,簡單和易讀的方法是什么。 我傾向於遍歷表格並進行更改,但是我會發現很多警告,請不要這樣做。
您可以使用&
或|
運算符組合多個條件,然后使用.loc
方法選擇按條件過濾的數據。
有兩點需要注意:1.使用.values
獲取分配給數據.values
的值。 2.使用==
運算符時不要忘記括號。
index = df['B'].isna()|(df['B']<5000)
index_1 = index & (df['A']=='S')
df.loc[index_1, 'B'] = df.loc[index_1, 'C'].values
index_2 = index & (df['A']=='X')
df.loc[index_2, 'B'] = (df.loc[index_2, 'C']+10).values
index_3 = index & (df['A']=='D')
df.loc[index_3, 'B'] = (df.loc[index_3, 'C']-10).values
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.