Как перевернуть столбец крысы ios, преобразовать в дробь и преобразовать в число с плавающей точкой - PullRequest
1 голос
/ 18 марта 2020

У меня есть следующий фрейм данных:

         Date Ratio
0  2000-06-21   4:1
1  2000-06-22   3:2
2  2000-06-23   5:7
3  2000-06-24   7:1

Для каждого элемента в столбце Ratio я хочу перевернуть соотношение, преобразовать его в дробь и преобразовать в число с плавающей точкой.

Значение 4: 1 станет 1: 4, затем: будет заменено на / и, наконец, получится 0,25. 3: 2 станет 2/3, который преобразуется в 0,66666666666.

Пока у меня есть только следующий код:

df['Ratio'] = df['Ratio'].str.split(":")

Ответы [ 3 ]

4 голосов
/ 18 марта 2020

Создать новый DataFrame с expand=True в Series.str.split, преобразовать в целые числа и последние столбцы деления:

df1 = df['Ratio'].str.split(":", expand=True).astype(int)
df['Ratio'] = df1[1].div(df1[0])

Для решения на одну строку возможно использование DataFrame.set_axis и DataFrame.eval:

df['Ratio'] = (df['Ratio'].str.split(":",expand=True)
                          .astype(int)
                          .set_axis(['a','b'], inplace=False, axis=1)
                          .eval('b/a'))
print (df)
         Date     Ratio
0  2000-06-21  0.250000
1  2000-06-22  0.666667
2  2000-06-23  1.400000
3  2000-06-24  0.142857
3 голосов
/ 18 марта 2020

Как насчет:

df['Ratio'] = df['Ratio'].apply(lambda x: 1 / eval(x.replace(':', '/')))

Или:

df['Ratio'] = 1 / df['Ratio'].str.replace(':', '/').apply(eval)

Или, как прокомментировал @ anky_91, pd.eval также работает:

df['Ratio'] = 1 / pd.eval(df['Ratio'].str.replace(':', '/'))
1 голос
/ 18 марта 2020

Вы также можете использовать свою собственную функцию, например, такую:

def get_new_ratio(ratio):
    ratio_splitted = list(map(int, ratio.split(':')))
    return ratio_splitted[1] / ratio_splitted[0]

И после этого использовать ее в качестве аргумента в pandas.DataFrame.apply():

>>> df['new_ratio'] = df.Ratio.apply(get_new_ratio)
>>> print(df)
         Date Ratio  new_ratio
0  2000-06-21   4:1   0.250000
1  2000-06-22   3:2   0.666667
2  2000-06-23   5:7   1.400000
3  2000-06-24   7:1   0.142857
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...