如何在pandas中添加新列,说明值在另一列中的出现情况

yks3o0rb  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(88)

我如何在pandas表中添加列的位置,只考虑前3列
| 卷号|联系方式|WordInAddr|位置|
| - -----|- -----|- -----|- -----|
| 1| A区|挡块|1|
| 1| A区|一个|2|
| 2|南新泽西街|南|1|
| 2|南新泽西街|泽西岛|3|
| 2|南新泽西街|街道|4|
| 2|南新泽西街|泽西岛|5个|

2vuwiymt

2vuwiymt1#

你可以使用numpy广播来计算密集矩阵。重置密集矩阵的下三角形,并获得第一个真值的位置(索引)。

  1. def find_pos(df):
  2. # Extract the unique string from Address
  3. s = np.array(df['Address'].iloc[0].split())
  4. # Extract words from WordInAddr
  5. w = df['WordInAddr'].values[:, None]
  6. # Create the boolean dense matrix
  7. m = s == w
  8. # Reset the lower triangle
  9. m[np.tril_indices_from(m, k=-1)] = False
  10. # Return the position
  11. return pd.Series(np.argmax(m, axis=1) + 1, index=df.index)
  12. df['Position'] = df.groupby('roll Num').apply(find_pos).droplevel(0)

输出:

  1. >>> df
  2. roll Num Address WordInAddr Position
  3. 0 1 Block A Block 1
  4. 1 1 Block A A 2
  5. 2 2 South New Jersey Street Jersey South 1
  6. 3 2 South New Jersey Street Jersey Jersey 3
  7. 4 2 South New Jersey Street Jersey Street 4
  8. 5 2 South New Jersey Street Jersey Jersey 5
展开查看全部

相关问题