簡體   English   中英

嵌套循環 - 替代解決方案 - Python pandas

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM