[英]Pandas : Compare the columns of a data frame and add a new column & value based on a condition
I have a data frame which is,我有一个数据框,
ip_df:
name class sec details
0 tom I a [{'class':'I','sec':'a','subjects':['numbers','ethics']},{'class':'I','sec':'b','subjects':['numbers','moral-science']},{'class':'I','sec':'c','subjects':['moral-science','ethics']},{'class':'I','subjects':['numbers','ethics1']}]
1 sam I d [{'class':'I','sec':'a','subjects':['numbers','ethics']},{'class':'I','sec':'b','subjects':['numbers','moral-science']},{'class':'I','sec':'c','subjects':['moral-science','ethics']},{'class':'I','subjects':['numbers','ethics1']}]
and the resultant data frame is suppose to be,并且结果数据框应该是,
op_df:
name class sec subjects
0 tom I a ['numbers','ethics']
1 sam I d ['numbers','ethics1']
The "op_df" has to be framed based on the following conditions, “op_df”必须根据以下条件进行构图,
Solution if need first matched value by both conditions with next
and iter
trick for add default value [0, 0]
if no matched:解决方案是否需要两个条件的第一个匹配值,如果没有匹配,则使用next
和iter
技巧添加默认值[0, 0]
:
final = []
for a, b, c in zip(df['class'], df['sec'], df['details']):
out = []
for x in c:
m1 = x['class'] == a
if m1 and x.get('sec') == b:
out.append(x['subjects'])
elif m1 and 'sec' not in list(x.keys()):
out.append(x['subjects'])
final.append(next(iter(out), [0,0]))
df['subjects'] = final
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.