[英]Nested loop - alternative solution - Python pandas
我已經開始學習 python,我想問一下下面的嵌套循環是否有另一種更快的解決方案:
for y in range(total_rows2):
for x in range(total_rows1):
if df2.iloc[y,0]==df1.iloc[x,0]:
df1.iloc[x,1]=df1.iloc[x,1]+df2.iloc[y,17]
基本上,我找到了兩個數據幀(df1 和 df2)的行數(total_rows1 和 total_rows2)。 兩個數據幀的第一列(索引=0)對應於一些 ID。
如果兩個數據框的 ID 匹配,那么我想將 df2(index 17, column name='Profit') 的第 18 列的值添加到 df1 的第二列 (index=1, column name='Profit') . 一個 id 可能會在 df2 中出現兩次,但我會在 df1 中出現總和(請參閱下面的 id 0108)。 因此 df1 的“利潤”列將是每個 ID 的利潤之和。
df2:
--- | ID | 利潤 |
---|---|---|
0 | 0104 | 0 |
1 | 0106 | 0 |
2 | 0107 | 0 |
3 | 0108 | 0 |
df1:
--- | ID | 失利 | 利潤 |
---|---|---|---|
0 | 0104 | 100 | 230 |
1 | 0106 | 200 | 150 |
2 | 0108 | 150 | 120 |
3 | 0107 | 120 | 230 |
4 | 0109 | 100 | 400 |
5 | 0108 | 150 | 400 |
所以我希望 df2 看起來如下:
--- | ID | 利潤 |
---|---|---|
0 | 0104 | 230 |
1 | 0106 | 150 |
2 | 0107 | 230 |
3 | 0108 | 520 |
謝謝!
我認為只需合並第一列上的兩個 dfs 然后進行添加就可以了。
框架:
>>> df1
ID B C D
0 e 3 8 1
1 d 5 1 1
2 g 6 5 1
3 e 8 8 7
4 j 9 3 6
5 i 4 0 5
6 g 0 4 1
7 a 3 7 2
8 e 0 6 9
9 b 2 9 6
>>> df2
ID col_17
0 j 9
1 c 3
2 d 6
3 g 4
4 h 4
5 g 5
6 e 1
7 d 8
8 b 0
9 i 6
合並:
>>> df3 = df1.merge(df2,how='left',on='ID')
>>> df3
ID B C D col_17
0 e 3 8 1 1.0
1 d 5 1 1 6.0
2 d 5 1 1 8.0
3 g 6 5 1 4.0
4 g 6 5 1 5.0
5 e 8 8 7 1.0
6 j 9 3 6 9.0
7 i 4 0 5 6.0
8 g 0 4 1 4.0
9 g 0 4 1 5.0
10 a 3 7 2 NaN
11 e 0 6 9 1.0
12 b 2 9 6 0.0
添加:
>>> df3['B']=np.where(df3['col_17'].notna(),df3['B']+df3['col_17'],df3['B'])
>>> df3
ID B C D col_17
0 e 4.0 8 1 1.0
1 d 11.0 1 1 6.0
2 d 13.0 1 1 8.0
3 g 10.0 5 1 4.0
4 g 11.0 5 1 5.0
5 e 9.0 8 7 1.0
6 j 18.0 3 6 9.0
7 i 10.0 0 5 6.0
8 g 4.0 4 1 4.0
9 g 5.0 4 1 5.0
10 a 3.0 7 2 NaN
11 e 1.0 6 9 1.0
12 b 2.0 9 6 0.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.