如何以最佳(pythonic)方式编写此代码?

时间:2018-10-23 20:43:54

标签: python r pandas

我在R中有以下代码,我需要使用pandas在python中以最佳方式编写它。我写了它,但是运行时间很长。

1)有人可以确认这等效于python中的R代码

2)如何以pythonic方式(最佳方式)编写它

在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()

2 个答案:

答案 0 :(得分:1)

这是两种替换方法

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

OR

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

答案 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
>>>