Python Dataframe: удалить цифры в нечетной позиции из строк df? - PullRequest
2 голосов
/ 25 мая 2020

У меня есть df с двумя столбцами number, type. Я пытаюсь удалить число в нечетной позиции, если type равно odd.

Для числа - (7,14,21,28) без цифр в odd позиции - 7,21.

Точно так же - (3,10,17,24,31) без номеров в позиции odd - 3,17,31

df

    df= pd.DataFrame(data = {'number' : ['7,14,21,28', '2', '3,6,5,8 ', '4', '3,10,17,24,31'], 'day' : ['odd', 'even', 'even', 'even', 'odd']}) 


    number          type
0   7,14,21,28      odd
1   2               even   
2   3,6,5,8         even
3   4               even
4   3,10,17,24,31   odd

Мой исключенный вывод:

        number          type
    0   7,21            odd
    1   2               even   
    2   3,6,5,8         even
    3   4               even
    4   3,17,31         odd

Ответы [ 3 ]

3 голосов
/ 25 мая 2020

Вы можете использовать простой string slicing с step = 2:

In [1755]: df.number = np.where(df['day'].eq('odd'), df.number.str.split(',').str[::2].str.join(','), df['number'])

In [1759]: df                                              
Out[1759]: 
     number   day
0      7,21   odd
1         2   even
2   3,6,5,8   even
3         4   even
4   3,17,31   odd
2 голосов
/ 25 мая 2020

Попробуйте это,

df.loc[df['day'] == "odd", "number"] = df.loc[df['day'] == "odd", "number"]. \
    apply(lambda x : ",".join([str(i) for i in x.split(",") if int(i) % 2 != 0]))

     number   day
0      7,21   odd
1         2  even
2  3,6,5,8   even
3         4  even
4   3,17,31   odd
1 голос
/ 25 мая 2020

Вы можете использовать функцию DataFrame.apply для вычисления вычислений для каждой строки.


d = pd.DataFrame(
      data = {'number' : ['7,14,21,28', '2', '3,6,5,8 ', '4', '3,10,17,24,31'],       
      'type' : ['odd', 'even', 'even', 'even', 'odd']})

d['number'] = d.apply(
   lambda row: \
      ", ".join(row['number'].split(',')[::2]) 
      if row['type'] == 'odd' 
      else row['number'], axis=1)

print(d.to_string())

      number  type
0      7, 21   odd
1          2  even
2   3,6,5,8   even
3          4  even
4  3, 17, 31   odd

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...