我在df中有一个列(“折扣”),每个值都采用其格式:
{u'customer': u'xdawd', u'end': None, u'coupon': {u'object': u'coupon', u'name': u'Black Friday', u'percent_off': None, u'created': 213213, u'times_redeemed': 10, u'amount_off': 2500, u'currency': u'gbp', u'object': u'discount', u'start': 1543327380, u'subscription': u'uiodsjciosdj'}
我想在新列中返回percent_off值或amount_off值(仅出现其中之一),所以我必须获得一个不等于None的值。
只是它在Excel中的示例: https://i.imgur.com/Dt2fj8i.png
答案 0 :(得分:2)
使用lambda function
和Series.apply
:
df['discount'].apply(lambda x: x['coupon'].get('percent_off') or x['coupon'].get('amount_off'))
[出]
0 2500
Name: discount, dtype: int64
或者,如果您希望按照@lenz建议更明确:
def extract_discount(x):
return x['coupon'].get('percent_off') or x['coupon'].get('amount_off')
df['discount'].apply(extract_discount)