嵌套IF Pandas
我想用IF语句在数据框中插入并填充“Mark”这一列的信息。但是在“Duration(Mins)”这一行等于“10.0”时,结果却是None。而“Duration(Mins)”这一列的数据类型是float64。谢谢你的回答。
import pandas as pd
# Define data as a dictionary
data = {
'Alarm Name': ['Cell Down', '4G Down', '3G Down', '2G Down', 'Cell Unavailable', 'Partial Down', 'Signalling Down'],
'Duration(Mins)': [3, 5.9, 10.1, 2.9, -12, 6, 10]
}
#Function
def mark(row):
if row['Duration(Mins)'] >= 0:
if row['Duration(Mins)'] < 3:
return '0-3 Mins'
elif row['Duration(Mins)'] < 6:
return '3-6 Mins'
elif row['Duration(Mins)'] < 10:
return '6-10 Mins'
elif row['Duration(Mins)'] > 10:
return '>10 Mins'
else:
return 'Open'
df['Mark'] = df.apply(mark, axis=1)
2 个回答
0
如果你需要一种高效的方法(也就是可以同时处理很多数据的方法),可以使用 pandas.cut
。
df["Mark"] = pd.cut(
df["Duration(Mins)"],
bins=[
-float("inf"),
0,
3,
6,
10,
float("inf"),
],
labels=["Open", "0-3 Mins", "3-6 Mins", "6-10 Mins", "> 10 Mins"],
right=False,
)
Alarm Name Duration(Mins) Mark
0 Cell Down 3.0 3-6 Mins
1 4G Down 5.9 3-6 Mins
2 3G Down 10.1 > 10 Mins
3 2G Down 2.9 0-3 Mins
4 Cell Unavailable -12.0 Open
5 Partial Down 6.0 6-10 Mins
6 Signalling Down 10.0 > 10 Mins
注意:列 "Mark"
的数据类型会是 pandas.Category
。
0
这个解决方案能帮到你吗?你在判断条件里漏掉了一个等号,应该是检查是否等于10分钟。
def mark(row):
if row['Duration(Mins)'] >= 0:
if row['Duration(Mins)'] < 3:
return '0-3 Mins'
elif row['Duration(Mins)'] < 6:
return '3-6 Mins'
elif row['Duration(Mins)'] < 10:
return '6-10 Mins'
elif row['Duration(Mins)'] >= 10:
return '>=10 Mins'
else:
return 'Open'
df['Mark'] = df.apply(mark, axis=1)
在你的版本中,当时间正好是10分钟的时候,没有被正确处理。