[英]How to change values in a pandas DataFrame column based on a condition in Python
我想更改我的行的值,如果列“state”的值为“CANCELLED”,那么它会将行值从“Activity”列更改为“Cancelled”
它应该是这样的:
ID | 活动 | state |
---|---|---|
1个 | 创建 | 取消 |
1个 | 完全的 | 取消 |
2个 | 创建 | 已完成 |
2个 | 完全的 | 完成的 |
3个 | 创建 | 拒绝 |
3个 | 拒绝 | 拒绝 |
我厌倦了使用df.loc[df.state == "CANCELLED", "Activity"] = "cancelled"
它确实改变了活动,但我仍然希望创建的活动是相同的。
还有一个错误
C:\Users\aldev\miniconda3\lib\site-packages\pandas\core\indexing.py:1720: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
self._setitem_single_column(loc, value, pi)
如果有人有答案提前谢谢
df.loc[(df.state == "CANCELLED") & (df.Activity != "created"), "Activity"] = "cancelled"
代码被遗漏()
,在(df.state == "CANCELLED")
我们需要找到 state = 'cancelled' 所在的行。 我们可以使用.loc(row, column)
运算符来 select state = 'cancelled' 的条目并返回 'Activity' 列,然后我们只需将这些值替换为 'cancelled'
import pandas as pd
data = {"ID": [1, 1, 2, 2, 3, 3], "Activity": ['created', 'completed', 'created', 'completed', 'created',
'rejected'], "state": ['cancelled', 'cancelled', 'finished', 'finished', 'rejected', 'rejected']}
df = pd.DataFrame(data)
df.loc[df['state'] == 'cancelled', 'Activity'] = 'cancelled'
print(df)
ID | 活动 | State |
---|---|---|
1个 | 取消 | 取消 |
1个 | 取消 | 取消 |
2个 | 创建 | 完成的 |
2个 | 完全的 | 完成的 |
3个 | 创建 | 拒绝 |
3个 | 拒绝 | 拒绝 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.