Как пройти через столбец dataframe panda, удалить строку и умножить значение как целое [duplicate]

Unstack and map i.e

ndf = df.unstack().to_frame().T

ndf.columns = ndf.columns.map('{0[0]}_{0[1]}'.format) 

    A_0  A_1  A_2  B_0  B_1  B_2  C_0  C_1  C_2  D_0  D_1  D_2  E_0  E_1  E_2
0    1    6   11    2    7   12    3    8   13    4    9   14    5   10    5

Если вы хотите отсортировать столбцы, вы можете сделать

ndf = df.unstack().to_frame().T.sort_index(1,1)
6
задан ast4 8 January 2013 в 17:45
поделиться

3 ответа

Вы можете создать функцию: и applymap для каждой записи в кадре данных:

powers = {'B': 10 ** 9, 'M': 10 ** 6, 'T': 10 ** 12}
# add some more to powers as necessary

def f(s):
    try:
        power = s[-1]
        return int(s[:-1]) * powers[power]
    except TypeError:
        return s

df.applymap(f)
6
ответ дан Andy Hayden 27 August 2018 в 02:44
поделиться

Демо:

In [58]: df
Out[58]:
       col
0  123.456
1      78M
2     0.5B

In [59]: d = {'B': 10**9, 'M': 10**6}

In [60]: df['new'] = \
    ...: df['col'].str.extract(r'(?P<val>[\d.]+)\s*?(?P<mult>\D*)', expand=True) \
    ...:   .replace('','1') \
    ...:   .replace(d, regex=True) \
    ...:   .astype(float) \
    ...:   .eval('val * mult')
    ...:

In [61]: df
Out[61]:
       col           new
0  123.456  1.234560e+02
1      78M  7.800000e+07
2     0.5B  5.000000e+08
2
ответ дан MaxU 27 August 2018 в 02:44
поделиться

Настройка Заимствование @ MaxU's pd.DataFrame

df = pd.DataFrame({'col': ['123.456', '78M', '0.5B']})

Решение Замените строки научным обозначением, затем используйте astype(float)

d = dict(M='E6', B='E9', T='E12')

df.replace(d, regex=True).astype(float)

            col
0  1.234560e+02
1  7.800000e+07
2  5.000000e+08
3
ответ дан piRSquared 27 August 2018 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: