說我有兩個帶有多索引的資料框,其中一個索引比另一個更深。現在我只想從一個(更深的)資料框中選擇那些行,其中它們的部分索引包含在另一個資料框中。
示例輸入:
df = pandas.DataFrame(
{
"A": ["a1", "a1", "a1", "a2", "a2", "a2"],
"B": ["b1", "b1", "b2", "b1", "b2", "b2"],
"C": ["c1", "c2", "c1", "c1", "c1", "c2"],
"V": [1, 2, 3, 4, 5, 6],
}
).set_index(["A", "B", "C"])
df2 = pandas.DataFrame(
{
"A": ["a1", "a1", "a2", "a2"],
"B": ["b1", "b3", "b1", "b3"],
"X": [1, 2, 3, 4]
}
).set_index(["A", "B"])
視覺的:
V
A B C
a1 b1 c1 1
c2 2
b2 c1 3
a2 b1 c1 4
b2 c1 5
c2 6
X
A B
a1 b1 1
b3 2
a2 b1 3
b3 4
期望的輸出:
result = pandas.DataFrame(
{
"A": ["a1", "a1", "a2"],
"B": ["b1", "b1", "b1"],
"C": ["c1", "c2", "c1"],
"V": [1, 2, 4],
}
).set_index(["A", "B", "C"])
視覺的:
V
A B C
a1 b1 c1 1
c2 2
a2 b1 c1 4
我試過了
df.loc[df2.index],df.loc[df.index.intersection(df2.index)]但這不起作用。
我想我可以這樣做df.join(df2, how="inner"),然后洗掉所有df2添加的列,但這很麻煩。或者有沒有辦法帶走所有的列df2?
我將不勝感激任何幫助。
uj5u.com熱心網友回復:
一種選擇是isin在兩者共有的特定標簽上使用,并使用結果布林值來過濾df:
df.loc[df.index.droplevel('C').isin(df2.index)]
V
A B C
a1 b1 c1 1
c2 2
a2 b1 c1 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/366591.html
下一篇:提高雙回圈的時間效率
