我有两个数据框: A:20 * 15的数字矩阵 B:20 * 1数字列表(从1-15开始)。
我想在表A的每一行中找到最大数目,但是只查看表B中的列
下面的简化示例。
谢谢!
+-----------------+
| A: |
+-----------------+
| 7 3 5 4 |
| 8 1 2 5 |
| 2 3 7 2 |
| 4 1 3 6 |
+-----------------+
| B: |
+-----------------+
| 2 |
| 4 |
| 1 |
| 2 |
| Desired result: |
| 7 |
| 8 |
| 2 |
| 4 |
答案 0 :(得分:3)
where
+ max
您想在每一行的前n
列中找到最大值,其中n
来自第二个数据帧。因此,遮盖不重要的单元格,然后将最大值设为max
会默认忽略NaN
。
import numpy as np
m = np.arange(dfa.shape[1]) < dfb[0][:, None] # Thanks rafaelc
dfa.where(m).max(1)
#0 7.0
#1 8.0
#2 2.0
#3 4.0
#dtype: float64
样本数据:
dfa
0 1 2 3
0 7 3 5 4
1 8 1 2 5
2 2 3 7 2
3 4 1 3 6
dfb
0
0 2
1 4
2 1
3 2
答案 1 :(得分:3)
使用pd.DataFrame.where
和np.ones
m = np.ones(dfa.shape).cumsum(1)
dfa.where(m <= dfb.to_numpy()).max(1)
也可以使用
m = np.broadcast_to(np.arange(len(dfa)) + 1, dfa.shape)
0 7.0
1 8.0
2 2.0
3 4.0
dtype: float64
答案 2 :(得分:2)
pandas
解决方案
S=A.stack()
S[B.reindex(S.index.get_level_values(0)).values>=S.index.get_level_values(1)].max(level=0)
Out[276]:
0 7
1 8
2 2
3 4
dtype: int64