2017-03-28 7 views
1

私は5つの行を持つデータセットを1つにマージして、それらを一意の列識別子として使用できるようにします。例Pandasの複数の行をマージする

Name Unique No. Summary Nominal Voltage Nominal Voltage Upstream Upstream NaN NaN Class Upstream Downstream Constraint Oppurtunity (non unique) NaN NaN NaN NaN Physical Nan

のために私は

Name (non unique) Unique No. Summary Class Nominal Voltage Upstream Nominal Voltage Downstream Upstream Constraint Phsyical Upstream Oppurtunity

私はその後、使用することができますので、行(5が実際にあります)(NaNを無視して)マージされるだろうという名前にする列を希望します一意の列名として使用します。

ありがとうございます。

私が理解できる限り、groupbyはグループ化されているものの間で共通のものを必要とするため、ここでは使用できません。データベース全体は現在、文字列型になっています。なぜなら、それが簡単に参加できると思ったからですが、方法を理解できませんでした。

+1

ルック(http://pandas.pydata.org/pandas-docs/stable/merging.html)[、マージ結合し、及び連結] –

+0

上のIかもしれませんドキュメントの誤読や誤解を招くことはありますが、ここで必要とされることは、マージ結合または連結ができないと思いました。彼らは、複数の行の内容を1つの行として返すのではなく、データフレームに参加するようです。 –

答えて

1

は、私はあなたが必要だと思うapplydropnaと:

df.columns = df.apply(lambda x: ' '.join([x.name] + x.dropna().tolist())) 

print (df.columns.tolist()) 

['Name (non unique)', 
'Unique No.', 
'Summary Class', 
'Nominal Voltage Upstream', 
'Nominal Voltage Downstream', 
'Upstream Constraint Physical', 
'Upstream Oppurtunity Nan'] 

一部stringNanがある場合 - replace最初:

df.columns = df.replace('Nan',np.nan) 
       .apply(lambda x: ' '.join([x.name] + x.dropna().tolist())) 
print (df.columns.tolist()) 
['Name (non unique)', 
'Unique No.', 
'Summary Class', 
'Nominal Voltage Upstream', 
'Nominal Voltage Downstream', 
'Upstream Constraint Physical', 
'Upstream Oppurtunity'] 

しかし、ユニークな列名が必要な場合は、最も単純には、次のとおりです。

df.columns = range(len(df.columns)) 
print (df.columns.tolist()) 
[0, 1, 2, 3, 4, 5, 6] 

または列のSSIGN新しい一意の値:パンダのドキュメントで

df.columns = list('abcdefg') 
print (df.columns.tolist()) 
['a', 'b', 'c', 'd', 'e', 'f', 'g'] 
+0

ありがとうございますので、適用されます! (私は列a-z等がより簡単になることを感謝しますが、列が常に同じ順序ではないので、後のコードをチェックして識別するためのタイトルが必要です) –

関連する問題