我想替換一列的多個值,但僅限于由 python 中不同列上的條件定義的選定行(即資料的子集)。例如,對于下表,我想用 22000 替換 22000,用 23 替換 23000,但前提是 Courses 等于 Spark,如下所示。
這是初始資料幀的代碼。
df = pd.DataFrame({
'Courses': ["Spark", "PySpark", "Spark", "Spark", "PySpark", "PySpark"],
'Fee': [22000, 25000, 23000, 24000, 22000, 23000],
})
| 培訓班 | 費用 | |
|---|---|---|
| 0 | 火花 | 22000 |
| 1 | PySpark | 25000 |
| 2 | 火花 | 23000 |
| 3 | 火花 | 24000 |
| 4 | PySpark | 22000 |
| 5 | PySpark | 23000 |
下面是想要的結果。
| 培訓班 | 費用 | |
|---|---|---|
| 0 | 火花 | 二十二 |
| 1 | PySpark | 25000 |
| 2 | 火花 | 23 |
| 3 | 火花 | 24000 |
| 4 | PySpark | 22000 |
| 5 | PySpark | 23000 |
我嘗試過使用df["Fee"].replace({22000:'twentytwo', 23000:'twentythree'}, inplace=True),但這會導致替換列中的所有指定值,而不僅僅是 Courses 等于 Spark 的位置。
uj5u.com熱心網友回復:
首先,我們需要一個更嚴格的選擇器,形式為df[x, y]wherex選擇行(Courses 等于 Spark)和y選擇列(“Fee”):
df[df["Courses"]=="Spark", "Fee"]
然后我們可以嘗試使用replace(),但是 pandas 會告訴我們我們是在“切片”上操作,而不是真正的資料框。從這篇文章中, df.update()可能有用。
解決方案:
replacements = {22000:'twentytwo', 23000:'twentythree'}
df.update(df.loc[df["Courses"]=="Spark", "Fee"].replace(replacements))
最后,由于要替換的值都不在“Courses”中,我們可以安全地洗掉列選擇器“Fee”。
...df.loc[df["Courses"]=="Spark"]...
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/516781.html
標籤:Python熊猫
上一篇:串列中的最大出現次數
下一篇:如何根據列值遞回分配組?
