擅长:python、mysql、java
<p>我设法实现了我想要的解决方案:</p>
<pre><code>In [55]: df = pd.DataFrame()
In [56]: for t, n in [(df1, 'df1'), (df2, 'df2')]:
....: t['nth'] = np.where(t.index.get_level_values(0).to_series().str.contains('1').values, t[2], t[3])
....: df[n, 'max'] = t[0].groupby(level=[0, 1]).max()
....: # reset_index() is required since nth() doesn't reduce number of index levels
....: df[n, 'nth'] = t['nth'].groupby(level=[0, 1]).nth(0).reset_index(level=2, drop=True)
In [57]: df
Out[57]:
(df1, max) (df1, nth) (df2, max) (df2, nth)
A1 B1 8 1 7 0
B2 6 3 9 3
A2 B1 7 2 7 3
B2 8 2 6 7
In [58]: df.columns = pd.MultiIndex.from_tuples(df.columns)
In [59]: df
Out[59]:
df1 df2
max nth max nth
A1 B1 8 1 7 0
B2 6 3 9 3
A2 B1 7 2 7 3
B2 8 2 6 7
</code></pre>