У меня есть 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
2
bassline_ballerina 14 Сен 2020 в 19:12

2 ответа

Лучший ответ

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
3
Shubham Sharma 14 Сен 2020 в 17:55

Попробуем извлечь значения с помощью 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
1
Quang Hoang 14 Сен 2020 в 16:22