python - Python:如果在熊猫数据框中满足多个条件的条件,则插入一行
问题描述
所以我有如下数据框:
Id a_no desc flag_1 flag_2
100 20 test 1 0
100 25 new_test 1 1
110 25 new_test 0 1
现在我正在尝试添加两列msg
并final_flag
使用以下逻辑
if len(desc) < 5, then msg = 'Short length' and final_flag = 'Reject'
if flag_1 == 0, then msg = 'Missing_item' and final_flag = 'Error'
if flag_2 == 0, then msg = 'Find_item' and final_flag = 'Error'
为了实现上述目的,我正在尝试以下代码
df['msg'] = np.where(df['desc'].str.len() < 5,'Short length',\
np.where(df['flag_1']==0,'Missing_item',\
np.where(df['flag_2']==0,'Find_item','All is Good')))
df['final_flag'] = np.where(df['msg'].str.contains('Missing | Find',regex=True),'Error',np.where(df['msg'].str.contains('Good',regex=True),'Accepted','Reject'))
使用上面的代码,我没有得到所需的输出,如下所示:
Id a_no desc flag_1 flag_2 msg final_flag
100 20 test 1 0 'Short length' Reject
100 20 test 1 0 'Find Item' Error <--as flag_2 ==0
100 25 new_test 1 1 'All is Good' Accepted
110 25 new_test 0 1 'Missing Item' Error
即对于每个条件(或如上所示的逻辑),如果满足条件,则在最终数据帧中插入一行。
我可以看到我的代码片段还不够。
我错过了什么吗?
解决方案
所以我制定了如下内容:
# creating a column based on each logic#
df['msg_str'] = np.where(df['desc'].str.len() < 5, 'Short Length','')
df['msg_flag_1'] = np.where(df['flag_1']==0,'Missing Item','')
df['msg_flag_2'] = np.where(df['flag_2']==0,'Find Item','')
#Unpivoting the dataframe
df_melt = pd.melt(df,id_vars = ['msg_str','msg_flag_1','msg_flag_2'],value_name='msg')
上述技术应产生如下数据帧:
Id a_no variable msg
100 20 msg_str Short Length
100 20 msg_flag_1
100 20 msg_flag_2 Find Item
100 25 msg_str
100 25 msg_flag_1
100 25 msg_flag_2
110 25 msg_str
110 25 msg_str_1 Missing Item
110 25 msg_str_2
现在我添加另一个 col:
df_melt['status'] = np.where(df_melt['msg'].str.contains('Missing|Short|Find',regex=True),'Reject','Accept')
这实际上解决了问题。当然,我可以df
再次旋转上述内容以获得所需的输出。
推荐阅读
- javascript - 如何在一秒间隔内获取字符
- swift - 如何在其他控制器中使用 UIlabel.text?
- video - 节点媒体服务器:在视频流上强制 480p
- reactjs - 单击按钮时尝试在反应js中显示模式
- android - baseadapter中的保存值按钮增量
- python - Python - 如何在列表中保持最小数字(从字符串转换为整数)?
- javascript - 在回调函数中访问全局变量
- system.reactive - 有没有告诉订阅观察者数量的 Rx.Net Operator?
- python - ValueError: int() 的无效文字,基数为 16
- javascript - React 无法对未定义的属性路径做出反应