У меня большой набор данных с несколькими столбцами, в каждом из этих столбцов есть 4 отдельных столбца.
Для простоты столбцы в Dataframe - это US.A, US.B, US.C, BR.A, BR.B, BR.C
Теперь, если столбец US.B только пустой, тогда заполните все столбцы, связанные с США, «-» аналогично, если BR.B пуст, то заполните столбцы, связанные с BR, «-».
Для этого я использую Python 3 и pandas. Я создал код для его запуска, но не особо доволен тем, как он выглядит, и подумал, есть ли более простой способ решения этой проблемы.
import pandas as pd
###Splitting the data set
df1 = df.drop(['D','E','F'], axis=1)
df2 = df.drop(['A', 'B','C'], axis=1)
###Now I tackle them individually
df1 = df1.astype(str)
df1 = df1[df1['US.B'].isnull()]
df1 = df1f.fillna(value="-")
df2 = df2.astype(str)
df2 = df2[df2['BR.B'].isnull()]
df2 = df2.fillna(value="-")
merge = pd.concat([df1, df2])
Теперь причина, по которой я преобразую DataFrame в строку, заключается в том, что по какой-то причине столбцы с датой «Nat» доставляют мне проблемы во время заполнения. Теперь это выглядит аккуратно, но я имею дело с огромным набором данных, и это повторяется несколько раз для достижения результата.
Данные:
1 US.A US.B US.C BR.A BR.B BR.C
2 Foo 123 01-01-2018 Foo 324 03-05-2017
3 Bar 124 02-01-2018 Bar 325 04-05-2017
4 Foo 125 03-01-2018
5 Bar 126 04-01-2018 Bar 327 06-05-2017
6 Foo 328 07-05-2017
7 Bar 128 06-01-2018 Bar 400 08-05-2017
8 100 07-01-2018 Foo 330
Результат:
1 US.A US.B US.C BR.A BR.B BR.C
2 Foo 123 01-01-2018 Foo 324 03-05-2017
3 Bar 124 02-01-2018 Bar 325 04-05-2017
4 Foo 125 03-01-2018 - - -
5 Bar 126 04-01-2018 Bar 327 06-05-2017
6 - - - Foo 328 07-05-2017
7 Bar 128 06-01-2018 Bar 400 08-05-2017
8 100 07-01-2018 Foo 330