I want to transform Data. This is my DataFrame (expense_overview)
| Expense | Proportion | |
|---|---|---|
| 0 | Salaries | 0.62 |
| 1 | Advertising | 0.15 |
| 2 | Office Rent | 0.15 |
| 3 | Equipment | 0.03 |
| 4 | Utilities | 0.03 |
| 5 | Supples | 0.01 |
| 6 | Food | 0.01 |
I want to replace the values of the Expense variable that has corresponding values in Proportion variable that are less then 5% with the value "Other".
mask = expense_overview.isin(expense_overview[expense_overview["Proportion"] < 0.05]["Expense"])
expense_overview[mask] = "Other"
But I get the following Error:
Cannot do inplace boolean setting on " TypeError: Cannot do inplace boolean setting on mixed-types with a non np.nan value
CodePudding user response:
Pandas only solution:
expense_overview[lambda x: x.Proportion < 0.05] = expense_overview[lambda x: x.Proportion < 0.05].assign(Expense="Other")
Or using np.where:
expense_overview["Expense"] = np.where(expense_overview["Proportion"] < 0.05, "Other", expense_overview["Expense"])
CodePudding user response:
Are you trying to do this:
expense_overview.loc[expense_overview["Proportion"] < 0.05, "Expense"] = "Other"
Result:
Expense Proportion
0 Salaries 0.62
1 Advertising 0.15
2 Office Rent 0.15
3 Other 0.03
4 Other 0.03
5 Other 0.01
6 Other 0.01
