Как добавить строки на основе определенного условия? - PullRequest
2 голосов
/ 04 апреля 2019

Я пытаюсь добавить 10 строк на основе merchant_id в таблице.Это оригинальная таблица -

id    email    trend_type
1    abc@xyz.com 
2    cdsm@kcmd.com

И это то, что я пытаюсь создать -

id    email    trend_type
1    abc@xyz.com   Bill 
1    abc@xyz.com   Visits
1    abc@xyz.com   Avg. Visits
1    abc@xyz.com   abc 
1    abc@xyz.com   mcd        
1    abc@xyz.com   mckfd      
1    abc@xyz.com   mfd        
1    abc@xyz.com   aps        
1    abc@xyz.com   mvmv       
1    abc@xyz.com   dep  
2    cdsm@kcmd.com Bill
2    cdsm@kcmd.com Visits    
.    .....         ...
.    .....         ...

У меня есть 10 различных типов трендов, которые я хочу добавить к одному идентификатору икомбинация электронной почты.Я создал массив всех типов трендов и попытался использовать вложенный цикл for, но у меня ничего не получилось.Мог бы действительно использовать некоторую помощь.

Ответы [ 3 ]

2 голосов
/ 04 апреля 2019

Использование Index.repeat и DataFrame.assign:

trends = ['Bill','Visits', 'Avg. Visits','abc',
          'mcd', 'mckfd', 'mfd', 'aps', 'mvmv', 'dep']

df_new = df.loc[df.index.repeat(len(trends))].assign(trend_type=trends * len(df))
print(df_new)

   id          email   trend_type
0   1    abc@xyz.com         Bill
0   1    abc@xyz.com       Visits
0   1    abc@xyz.com  Avg. Visits
0   1    abc@xyz.com          abc
0   1    abc@xyz.com          mcd
0   1    abc@xyz.com        mckfd
0   1    abc@xyz.com          mfd
0   1    abc@xyz.com          aps
0   1    abc@xyz.com         mvmv
0   1    abc@xyz.com          dep
1   2  cdsm@kcmd.com         Bill
1   2  cdsm@kcmd.com       Visits
1   2  cdsm@kcmd.com  Avg. Visits
1   2  cdsm@kcmd.com          abc
1   2  cdsm@kcmd.com          mcd
1   2  cdsm@kcmd.com        mckfd
1   2  cdsm@kcmd.com          mfd
1   2  cdsm@kcmd.com          aps
1   2  cdsm@kcmd.com         mvmv
1   2  cdsm@kcmd.com          dep
1 голос
/ 04 апреля 2019

возможно, вы можете использовать такие вещи:

d = {'email':'blabla.bloblo@blublu.com',
    'trend_type':['bill','visits','abc', 'mcd', 'etc']}
data = pd.DataFrame(d)

Вам просто нужно добавить больше записей в свой словарь и обновить список трендов =)

Я надеюсь, что это будеттебе поможет!

1 голос
/ 04 апреля 2019

Использование product с DataFrame.join:

from  itertools import product

#add all types
types = ['Bill','Visits','Avg. Visits']
s = pd.DataFrame(list(product(df.index, types))).set_index(0)[1].rename('trend_type')
df = df.join(s).reset_index(drop=True)
print (df)
   id          email   trend_type
0   1    abc@xyz.com         Bill
1   1    abc@xyz.com       Visits
2   1    abc@xyz.com  Avg. Visits
3   2  cdsm@kcmd.com         Bill
4   2  cdsm@kcmd.com       Visits
5   2  cdsm@kcmd.com  Avg. Visits
...