Как отделить и добавить значения в DataFrame?

#python #pandas #dataframe

#python #pandas #dataframe

Вопрос:

У меня есть DataFrame, который выглядит как:

df1:

  A  |  B  |  C
----|-----|----
 2T |  3K | 0.0None
 3K |  7K |  4T
0.0N|  4T |  3T
  

Что мне нужно, так это разделить и добавить значения, в которых есть T и K, и возвращать только число без текста. Также полностью игнорировать 0.0Nonne.

Итоговая таблица должна выглядеть следующим образом:

df2:

  T  |  K
----|----
 2  |  3
 4  |  10
 7  |  0
  

Ответ №1:

stack фрейм данных, который нужно изменить, затем используйте Series.str.extract с шаблоном регулярных выражений, указав группы захвата и sum на level=0 :

 p = r'^(?:(?P<T>[d.] (?=T))|(?P<K>[d.] (?=K)))'
s = df.stack().str.extract(p).astype(float).sum(level=0)
  

      T     K
0  2.0   3.0
1  4.0  10.0
2  7.0   0.0
  

Комментарии:

1. @bassline_ballerina Можете ли вы уточнить?

2. Привет, это работает, но не дает мне правильных результатов. Реальный фрейм данных, который у меня есть, имеет значения: Первая строка: 110,0T 141,9T 85,0T 0,0Нет, Вторая строка: 125,0T 109,65T 75,0T 120,69999999999999T « ваш код возвращает: Первая строка 9 для T и 0 для K, Вторая строка 7e 13 для T и 0 для K

3. Мне кажется, что он принимает только номер вычисления после точки.

4. @bassline_ballerina Можешь попробовать s = df.stack().str.extract(r'^(?:(?P<T>[d.] (?=T))|(?P<K>[d.] (?=K)))').astype(float).sum(level=0)

Ответ №2:

Давайте попробуем извлечь значения с помощью str.extract . Затем groupby().sum() :

 (df.stack().str.extract('^(d )(T|K)')
   .dropna()
   .assign(order=lambda x: x.groupby([1]).cumcount())
   .pivot(index='order',columns=[1], values=0)
   .astype(float)
   .groupby('T', as_index=False).sum()
)
  

Вывод:

 1    T     K
0  2.0   3.0
1  3.0   0.0
2  4.0  10.0