【发布时间】:2020-11-23 09:07:00
【问题描述】:
给定一个数据集如下:
starting destination numbers time
0 BJS SZX 18 14
1 BJS SHA 25 12
2 CTU KMG 23 43
3 HFE HGH 15 18
4 HGH HFE 17 41
5 KMG CTU 32 55
6 SHA BJS 25 12
7 SZX BJS 18 14
8 TSN BJS 9 21
9 AVA HZH 9 17
10 BJS SHA 31 52
11 HZH AVA 31 63
12 SHA BJS 28 33
13 TNA WUS 17 27
14 WUS TNA 17 95
15 BJS SHA 11 37
16 JXA LDS 11 28
17 LDS JXA 0 0
18 SHA BJS 17 36
19 BJS SEA 25 30
我将starting 和destination 组合为line by df['line'] = df[['starting', 'destination']].apply(lambda x: '-'.join(x), axis=1):
starting destination numbers time line
0 BJS SZX 18 14 BJS-SZX
1 BJS SHA 25 12 BJS-SHA
2 CTU KMG 23 43 CTU-KMG
3 HFE HGH 15 18 HFE-HGH
4 HGH HFE 17 41 HGH-HFE
5 KMG CTU 32 55 KMG-CTU
6 SHA BJS 25 12 SHA-BJS
7 SZX BJS 18 14 SZX-BJS
8 TSN BJS 9 21 TSN-BJS
9 AVA HZH 9 17 AVA-HZH
10 BJS SHA 31 52 BJS-SHA
11 HZH AVA 31 63 HZH-AVA
12 SHA BJS 28 33 SHA-BJS
13 TNA WUS 17 27 TNA-WUS
14 WUS TNA 17 95 WUS-TNA
15 BJS SHA 11 37 BJS-SHA
16 JXA LDS 11 28 JXA-LDS
17 LDS JXA 0 0 LDS-JXA
18 SHA BJS 17 36 SHA-BJS
19 BJS SEA 25 30 BJS-SEA
我需要对line 列进行分组,然后总结numbers 和time,但我们应该将BJS-SZX 和SZX-BJS、BJS-SHA 和SHA-BJS 等视为同一行。
df.groupby(['line'])['numbers', 'time'].apply(lambda x : x.astype(int).sum())
输出:
numbers time
line
AVA-HZH 9 17
BJS-SEA 25 30
BJS-SHA 67 101
BJS-SZX 18 14
CTU-KMG 23 43
HFE-HGH 15 18
HGH-HFE 17 41
HZH-AVA 31 63
JXA-LDS 11 28
KMG-CTU 32 55
LDS-JXA 0 0
SHA-BJS 70 81
SZX-BJS 18 14
TNA-WUS 17 27
TSN-BJS 9 21
WUS-TNA 17 95
我们怎么能做到这一点?谢谢。
【问题讨论】:
标签: python-3.x pandas dataframe