Как написать этот код оптимальным (pythonic) способом?

1

У меня есть следующий код в R, и мне нужно написать его оптимальным способом в python с помощью pandas. Я написал это, но это займет много времени.

1) есть кто-то, кто может подтвердить, что это эквивалент R-кода в python

2) как записать его на питоновском пути (оптимальным способом)

в R

for (i in 1:dim(df1)[1])
    df1$column1[i] <- sum(df2[i,4:33])

в Python

for i in range(df1.shape[0]):
    df1['column1'][i] = df2.iloc[i,3:34].sum()
  • 0
    В df1.loc[:, 'column1'] = df2.iloc[:, 3:34].sum(1) скорее всего просто df1.loc[:, 'column1'] = df2.iloc[:, 3:34].sum(1) . Но, надеюсь, df1 и df2 выровнены по индексу ...
  • 0
    Я не знаю R, но уверен, что смогу помочь тебе в Python. Не могли бы вы привести пример ввода / вывода, который вы ищете?
Теги:
pandas

2 ответа

1

Это два способа сделать замену

df1['column1'] = df2.iloc[:, 3:34].sum(axis=1)

ИЛИ ЖЕ

df1.loc[:, 'column1'] = df2.iloc[:, 3:34].sum(axis=1)
1

Использование векторизованных операций:

>>> df = pd.DataFrame(np.random.randint(0, 100, (10, 15)), columns=list('abcdefghijklmno'))
>>> df
    a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
0  71  93  12  32  17  23  35  57  26  89   4  29  28  83  30
1  98  78  75   0  61  81   8  17  93  71  48  47  72  52  11
2  13  62  93  48  31  23  42  66  77  99  59   1  40  72  87
3   7   5   5  43  83  19  59  36  18  96  50  60  46  45  54
4  32  69  93   6   7  12  15  49  29  11  37  83  75  97  84
5  52  53  43  61  93  85  91  99  65  62  35  89  55  77  62
6  44   7  41  56  40  11  39  91  87  46  95  48  30  75  16
7  93  15  63  23  14  20   7  33  29  31  41  40  82   0  16
8  46  63  59  59  81  51  34  41  89  68  20  64  95  70  74
9  33  58  49  91  51  46  43  83  37  53  47  32  42  12  59

Тогда просто:

>>> df['column1'] = df.iloc[:, 3:8].sum(axis=1)
>>> df
    a   b   c   d   e   f   g   h   i   j   k   l   m   n   o  column1
0  71  93  12  32  17  23  35  57  26  89   4  29  28  83  30      164
1  98  78  75   0  61  81   8  17  93  71  48  47  72  52  11      167
2  13  62  93  48  31  23  42  66  77  99  59   1  40  72  87      210
3   7   5   5  43  83  19  59  36  18  96  50  60  46  45  54      240
4  32  69  93   6   7  12  15  49  29  11  37  83  75  97  84       89
5  52  53  43  61  93  85  91  99  65  62  35  89  55  77  62      429
6  44   7  41  56  40  11  39  91  87  46  95  48  30  75  16      237
7  93  15  63  23  14  20   7  33  29  31  41  40  82   0  16       97
8  46  63  59  59  81  51  34  41  89  68  20  64  95  70  74      266
9  33  58  49  91  51  46  43  83  37  53  47  32  42  12  59      314
>>>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню