2つのデータフレームがあり、それぞれに多重指数があります。マルチインデックスレベルは名前を共有しますが、順序が異なります。追加または連結する場合、パンダは、追加する前にインデックスのない列を整列するのと同じように、インデックスを整列することを期待します。これを私が望む方法で機能させるために追加または連結するために渡すことができる関数または引数はありますか(そして私はそれが標準であるべきだと思います)?
import pandas as pd
df1 = pd.DataFrame(data = {'Name':['Bob','Ann','Sally'], 'Acct':['Savings','Savings','Checking'], 'Value':[101,102,103]})
df1 = df1.set_index(['Name','Acct'])
print(df1)
df2 = pd.DataFrame(data = {'Acct':['Savings','Savings','Checking'], 'Name':['Bob','Ann','Sally'], 'Value':[201,202,203]})
df2 = df2.set_index(['Acct','Name'])
print(df2)
print(df1.append(df2))
print(pd.concat([df1,df2]))
Value
Name Acct
Bob Savings 101
Ann Savings 102
Sally Checking 103
Value
Acct Name
Savings Bob 201
Ann 202
Checking Sally 203
Value
Name Acct
Bob Savings 101
Ann Savings 102
Sally Checking 103
Savings Bob 201
Ann 202
Checking Sally 203
Value
Name Acct
Bob Savings 101
Ann Savings 102
Sally Checking 103
Savings Bob 201
Ann 202
Checking Sally 203
ご覧のとおり、追加または連結した後、結合されたインデックスは、たとえば、「Sally」が名前ではなくアカウントであることを示しているように見えます。インデックスを設定するときにインデックスレベルを同じ順序にすると、必要なものが得られ、フレームのインデックスをリセットして位置合わせできることはわかっていますが、もっと直感的になることを望んでいます。インデックスを位置ではなく名前に揃える方法。
やや作業の周りの、することができますreset_index
両方のデータセットに、concat
彼ら、そしてset_index
:
print(pd.concat([
df1.reset_index(),
df2.reset_index()
], sort=False).set_index([
'Name',
'Acct'
]))
Value
Name Acct
Bob Savings 101
Ann Savings 102
Sally Checking 103
Bob Savings 201
Ann Savings 202
Sally Checking 203
同じインデックスを持つ複数の行が必要な理由はわかりませんが...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加