同时在Pandas数据框中执行多项操作

时间:2018-08-31 06:04:23

标签: python python-3.x pandas dataframe

我有一个主数据帧D1:

PRCESS_NO   VALUE   COUNT   TIME
18          25855   69      13:41:56
19          10254   8       13:42:14
20          10254   4       13:42:20
21          68522   18      13:42:29
22          68522   75      13:42:33
23          25855   21      13:42:37
24          10254   658     13:42:53
25          10254   84      13:42:59

D2数据框:

PRCESS_NO   VALUE   COUNT   TIME
21          68522   12      14:32:25
22          68522   10      14:42:39
23          25855   54      14:38:25

我要按照以下条件使用D2数据帧中的值更新主数据帧D1:

  1. 添加“ VALUE&COUNT”列的值(D1.VALUE + D2.VALUE,D1.COUNT + D2.COUNT)
  2. 使用“ D2时间”列中的值更新“ D1时间”列。

最终D1数据框:

PRCESS_NO   VALUE   COUNT   TIME
18          25855   69      13:41:56
19          10254   8       13:42:14
20          10254   4       13:42:20
21          68522   30      14:32:25
22          68522   85      14:42:39
23          25855   75      14:38:25
24          10254   658     13:42:53
25          10254   84      13:42:59

1 个答案:

答案 0 :(得分:1)

DataFrame.addcombine_first一起使用:

cols = ['VALUE','COUNT']
D1 = D1.set_index('PRCESS_NO')
D2 = D2.set_index('PRCESS_NO')

D1[cols] = D1[cols].add(D2[cols], fill_value=0).astype(int)
D1['TIME'] = D2['TIME'].combine_first(D1['TIME'])
D1 = D1.reset_index()
print (D1)
   PRCESS_NO   VALUE  COUNT      TIME
0         18   25855     69  13:41:56
1         19   10254      8  13:42:14
2         20   10254      4  13:42:20
3         21  137044     30  14:32:25
4         22  137044     85  14:42:39
5         23   51710     75  14:38:25
6         24   10254    658  13:42:53
7         25   10254     84  13:42:59

concatagg sumlast的总和:

D1 = (pd.concat([D1,D2])
        .groupby('PRCESS_NO', as_index=False)
        .agg({'VALUE':'sum', 'COUNT':'sum', 'TIME':'last'}))
print (D1)
   PRCESS_NO   VALUE  COUNT      TIME
0         18   25855     69  13:41:56
1         19   10254      8  13:42:14
2         20   10254      4  13:42:20
3         21  137044     30  14:32:25
4         22  137044     85  14:42:39
5         23   51710     75  14:38:25
6         24   10254    658  13:42:53
7         25   10254     84  13:42:59