Python 熊猫:比较数据框的列并添加新列&;基于条件的值
我有一个数据框Python 熊猫:比较数据框的列并添加新列&;基于条件的值,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据框 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','eth
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']}]
假设得到的数据帧是
op_df:
name class sec subjects
0 tom I a ['numbers','ethics']
1 sam I d ['numbers','ethics1']
“op_df”必须基于以下条件进行框定:
- 条件1:检查“详细信息”列中是否存在“类”和“秒”,如果存在,请添加一个名为“主题”的新列及其相应的值
- 条件2:如果“详细信息”列中不存在“类”和“秒”,请检查“类”是否匹配,如果匹配,请添加一个名为“主题”的新列及其相应的值
- 如果条件1和条件2都不存在,则在“主题”列中添加默认值[0,0]
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
你试过什么?你面临的问题是什么?我们应该帮你做什么?