используйте groupby
merge
и concat
Кроме того, вы все еще никогда не упоминали, как рассчитывается percentageA/B
# groupby and apply with join to get devices
d = df.groupby(['Country','category','brand','quarter'])['device'].apply('+'.join)
# groupby with sum then merge the two groups together with reset_index
new = df.groupby(['Country','category','brand','quarter']).sum().merge(d, left_index=True, right_index=True).reset_index()
# concat original df with new
pd.concat([df,new], sort=False)
Country category brand quarter device countA CountB percentageA/B
0 XXX A1 A2 Q2 PC 12 12 100
1 XXX A1 A2 Q2 Tablet 2 4 50
2 YYY A4 A5 Q4 PC 50 50 100
3 YYY A4 A5 Q4 Tablet 10 10 100
0 XXX A1 A2 Q2 PC+Tablet 14 16 150
1 YYY A4 A5 Q4 PC+Tablet 60 60 200
, или вы можете попробовать:
# groupby and apply with join to get devices
d = df.groupby(['Country','category','brand','quarter'])['device'].apply('+'.join).to_frame().reset_index()
# groupby with sum then merge the two groups together with reset_index
new = df.groupby(['Country','category','brand','quarter'], as_index=False).sum().merge(d, on=['Country','category','brand','quarter'])
# concat original df with new
final_df = pd.concat([df,new], sort=False)
final_df['percentageA/B'] = final_df['countA'] / final_df['CountB'] * 100
Я думаю, что это - лучший подход:
NSString* escapedUrl = [originalUrl
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Если Вы хотите понять, как кодирование URL работает, смотрите на этот URL.
Посмотрите RFC 2396 для полных окровавленных деталей. Следующих символов нужно оставить:
Control characters (ASCII 00-1F and 7F) Space < > # % "
Следующие символы неблагоразумны для использования, не выходя, потому что некоторые шлюзы и другие транспортные агенты, как известно, иногда изменяют такие символы, или они используются в качестве разделителей:
{ } | \ ^ [ ] `