1
インデックスごとに1つの行しか保持しないマルチインデックスデータフレームをフィルタリングする方法を理解できません。ここで各マルチインデックスpandasデータフレームの最小値を取得
は私のデータです: は、PDとしてNPとして輸入ランダム 輸入numpyの 輸入パンダ
A = np.array(['ID1', 'ID1', 'ID2', 'ID3', 'ID3', 'ID3', 'ID4', 'ID4'])
B = np.array([1, 2, 2, 5, 3, 7, 12, 9])
C = np.array([1,2,3,4,5,6,7,8])
D = list('abcdefgh')
df1 = pd.DataFrame(zip(A, B, C, D), columns=['ID', 'trial', 'C', 'D'])
df1.set_index(['ID', 'trial'], inplace=True)
a = np.array(['ID2', 'ID3', 'ID4'])
b = np.array([2,2,11])
df2 = pd.DataFrame(zip(a,b), columns = ['sub', 'attempt'])
DF1:
C D
ID trial
ID1 1 1 a
2 2 b
ID2 2 3 c
ID3 5 4 d
3 5 e
7 6 f
ID4 12 7 g
9 8 h
DF2:
sub attempt
0 ID2 2
1 ID3 2
2 ID4 11
そして私ですdf1から守るのと同じように、データth 「試み」に関する条件とDF2に一致し、それはdf2.attemptするdf1.trialのための最も近い値を持つ行を維持する必要がありますで:
C D
ID trial
ID2 2 3 c
ID3 3 5 e
ID4 12 7 g
私は反復「の」(多くは本当に汚い方法を見つけました...)、私はもっと美しいものがあるように感じます。
私がやりたいもう一つは、DF1で各マルチインデックスの最初の行だけを維持することです:
C D
ID trial
ID1 1 1 a
ID2 2 3 c
ID3 5 4 d
ID4 12 7 g
しかし、また、ここで、私は別のものを作成することによって、汚いコードを取得します。
ありがとうございました。
ありがとうございました。私には最初の方向性があります。しかし、私の場合、 'C'または 'D'列は必ずしも注文されているわけではないので、最初の行が必要なのはこのためです。また、 'C'と 'D'は整数でも文字列でもオブジェクトではありません。 – POINTEAG
更新@POINTEAG – piRSquared