Выберите два столбца панд, которые имеют одинаковую цифру в имени столбца - PullRequest
0 голосов
/ 23 сентября 2019

Я очищаю некоторые данные, и в наборе необработанных данных есть записи как ['Field1.1', 'Field2.1', 'Field1.2', 'Field2.2'].Для набора данных либо 'Field1' XOR 'Field2' будет иметь непустую строку.Я хотел бы создать одно поле 'Field.1', которое будет извлекать непустую строку из 'Field1.1' XOR 'Field2.1' и помещать ее в 'Field.1'.Точно так же я хотел бы сделать это для 'Field1.2' и 'Field2.2' как 'Field.2'.

Я не уверен, как выбрать подходящие поля, то есть «X.1» с «Y.1» и «X.2» с «Y.2», чтобы сделать это.


Моя логика заключается в том, что, как только я могу выбрать правильные пары, я могу просто использовать оператор concat, чтобы добавить их и тем самым извлечь непустую строку для последующего использования.Если эта логика неверна или существует лучший способ, который не предполагает извлечения непустой строки таким образом, чтобы объединить их, то, пожалуйста, дайте мне знать.


Если логика верна, пожалуйста,объясните, как можно выполнить это извлечение с учетом проблемы с индексированием.


Чтобы быть более понятным, я хочу перейти от:

df = pd.DataFrame({'field1.1': ['string1',''], 'field2.1':['','string2'],
                   'field1.2': ['string3',''], 'field2.2':['','string4']})

df

Out[1]: 
  field1.1 field2.1 field1.2 field2.2
0  string1           string2         
1           string3           string4

к:

df2 = pd.DataFrame({'field.1': ['string1','string3'], 'field.2':['string2','string4']})

df2

Out[2]: 
   field.1  field.2
0  string1  string2
1  string3  string4

1 Ответ

1 голос
/ 23 сентября 2019

Вы можете использовать wide_to_long, bfill, а затем pivot назад:

(pd.wide_to_long(df.where(df.ne('')).reset_index(), 
                 stubnames=['Field1','Field2'],
                 i='index', 
                 j='group', 
                 sep='.')
 .bfill(1)
 .reset_index()
 .pivot(values='Field1',index='index',columns='group')
)

Пример данных:

df = pd.DataFrame([
    ['a','','b',''],
    ['c','','','d'],
    ['','e','','f'],
    ['','g','h','']],
    columns=['Field1.1', 'Field2.1', 'Field1.2', 'Field2.2'])

group  1  2
index      
0      a  b
1      c  d
2      e  f
3      g  h
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...