Dan*_*ty2 3 python compare min dataframe pandas
给出以下数据框架:
d1=pd.DataFrame({'A':[1,2,np.nan],'B':[np.nan,5,6]})
d1.index=['A','B','E']
A B
A 1.0 NaN
B 2.0 5.0
E NaN 6.0
d2=pd.DataFrame({'A':[4,2,np.nan,4],'B':[4,2,np.nan,4]})
d2.index=['A','B','C','D']
A B
A 4.0 4.0
B 2.0 2.0
C NaN NaN
D 4.0 4.0
Run Code Online (Sandbox Code Playgroud)
我想比较它们以找到每个相应行中的最低值,同时保留两个行中的所有行索引.这是我正在寻找的结果:
A B
A 1.0 4.0
B 2.0 2.0
C NaN NaN
D 4.0 4.0
E NaN 6.0
Run Code Online (Sandbox Code Playgroud)
提前致谢!
您可以连接dfs,然后使用groupby保持最小值
df = pd.concat([d1,d2])
df = df.groupby(df.index).min()
Run Code Online (Sandbox Code Playgroud)
你得到
A B
A 1.0 4.0
B 2.0 2.0
C NaN NaN
D 4.0 4.0
E NaN 6.0
Run Code Online (Sandbox Code Playgroud)
编辑:来自@root和@ScottBoston的更简洁的解决方案
pd.concat([d1, d2]).groupby(level=0).min()
Run Code Online (Sandbox Code Playgroud)
aligning首先是两个数据框(索引和列)的另一个选项,然后使用numpy.fmin:
pd.np.fmin(*d1.align(d2))
Run Code Online (Sandbox Code Playgroud)
不那么复杂:
d1, d2 = d1.align(d2)
pd.np.fmin(d1, d2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |