2017-11-09 4 views
1

2つの異なるワードで構成されたデータが2つの別々のセルに分割されたエラーが発生したデータフレームがあります。例:エラーが発生したフレーム。例:同じ行の文字を含むセルが1つのセルに結合されます

col1 col2 col3 col4 col5 
0 A  1  2  3 
1 B  C  3  4  5 
2 D  6  7  8 
3 B  E  9  10  11 

Iは、同時に左の行のすべての残りの部分を移動させながら、同じ行からの細胞から文字が1つのセルに結合する接続たいです。フォームで結果を取得するには、次の

col1 col2 col3 col4 col5 
0 A  1  2  3 
1 B C  3  4  5 
2 D  6  7  8 
3 B E  9  10  11 

私は今df.replace(['C', 'E'], [np.nan, np.nan], regex=True)を使用して、後でdf.iloc[[n]].dropna(axis=1, how="any")列によってよ。しかし、これは私が手の上にあるため例では、理想的ではありません。

col1 col2 col3 col4 col5 
0 A  1  2  3 
1 B  3  4  5 
2 D  6  7  8 
3 B  9  10  11 

だから、実際には真実ではない、同じ名前、2行。彼らはそれぞれ「B C」と「B E」と呼ばれるべきであるからです。また、データに応じてNaNに切り替えるためにセル名を手動で入力する必要があるたびに、 アイデアはありますか?

答えて

1

私が提供するソリューションは、やり過ぎです...しかし、まだ

df1=df.stack().to_frame() 

m=df1[0].groupby(level=0).apply(lambda x :x.str.isalpha().diff().ne(0).cumsum()) 
df1.groupby([df1.index.get_level_values(0),m]).sum().unstack().add_prefix('col1_') 
Out[116]: 
    col1_0      
0 col1_1 col1_2 col1_3 col1_4 
0  A  1  2  3 
1  BC  3  4  5 
2  D  6  7  8 
3  BE  9  10  11 

ちょうど

m=df1[0].groupby(level=0).apply(lambda x :x.str.isalpha().ne(1).cumsum()) 
df1.groupby([df1.index.get_level_values(0),m]).sum().unstack().add_prefix('col1_') 
Out[164]: 
    col1_0      
0 col1_0 col1_1 col1_2 col1_3 
0  A 1,5 2,5 3,5 
1  BC 3,5 4,5 5,5 
2  D 6,5 7,5 8,5 
3  BE 9,5 10,5 11,5 
+0

少しツイストここで変更する作業が、それは動作します:)今私はを取り除くためにしようとしていますcol1_0行。 –

+0

@TomaszPrzemski https://stackoverflow.com/questions/22233488/pandas-drop-a-level-from-a-multi-level-column-index – Wen

+0

私が今見つけたのは –

関連する問題