Заполните новые pandas df на основе значений в другом df - PullRequest
2 голосов
/ 29 мая 2020

Я здесь новенький, поэтому, пожалуйста, не обижайся на меня! :)

См. Рисунок ниже!

Print screen: df['Datan]

Я пытаюсь создать новый фрейм данных (df['New_df']) на основе значений в df['Datan'], чтобы df['New_df'] было равно df['Datan'] в строках, где появляется строка #SRU. Если строка не находится в df['Datan'], я хочу, чтобы df['New_df'] «сохранял» значение строки выше (где была включена строка #SRU).

См. Ниже df того, что я пытаюсь to do.

                                          Datan          New_df
                                 #SRU 1512 7251  #SRU 1512 7251
   #KONTO 1513 "Kundfordringar - delad faktura"  #SRU 1512 7251
                                 #SRU 1513 7251  #SRU 1513 7251
   #KONTO 1519 "Nedskrivning av kundfordringar"  #SRU 1513 7251
                                 #SRU 1519 7251  #SRU 1519 7251

Я пробовал использовать циклы for в сочетании с операторами if, в частности, с методом apply, но пока не нашел решения. Не удалось найти эту конкретную проблему c ни в каких других потоках здесь.

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Используйте str.contains, чтобы проверить соответствие string, а затем используйте ffill, чтобы заполнить na

df['New_df'] = df.Datan.where(df.Datan.str.contains('#SRU')).ffill()
df
   Index                                           Datan            New_df
0     95                                 #SRU 1512 7251    #SRU 1512 7251
1     96   #KONTO 1513 "Kundfordringar - delad faktura"    #SRU 1512 7251
2     97                                 #SRU 1513 7251    #SRU 1513 7251
3     98   #KONTO 1519 "Nedskrivning av kundfordringar"    #SRU 1513 7251
4     99                                 #SRU 1519 7251    #SRU 1519 7251
2 голосов
/ 29 мая 2020

Используйте комбинацию Series.str.contains, Series.mask и Series.ffill:

m = df['Datan'].str.contains(r'#SRU')
df['New_df'] = df['Datan'].mask(~m).ffill()

Результат:

# print(df)
                                          Datan          New_df
0                                #SRU 1512 7251  #SRU 1512 7251
1  #KONTO 1513 "Kundfordringar - delad faktura"  #SRU 1512 7251
2                                #SRU 1513 7251  #SRU 1513 7251
3  #KONTO 1519 "Nedskrivning av kundfordringar"  #SRU 1513 7251
4                                #SRU 1519 7251  #SRU 1519 7251
...