2015-04-26 279 views
1

我有以下兩個數據框: 第一列是索引,最後一列是通過向它附加'.txt'從索引派生的。熊貓組合數據幀

A 
1 0.2 0.3 1.txt 
2 0.4 0.6 2.txt 

B 
1 0.1 0.8 1.txt 
2 3.0 4.5 2.txt 

我想他們如此結合:

1 0.2 0.3 1.txt 
2 0.4 0.6 2.txt 
3 0.1 0.8 3.txt 
4 3.0 4.5 4.txt 

我試着用熊貓合併,但不使用for循環迭代明確地不知道如何去做。有什麼建議麼?

回答

3

concat他們作爲一個列表,並通過PARAM ignore_index=true,然後分配索引值到第3列,轉換爲str D型細胞,然後追加TXT」 .TXT:

In [93]: 

merged = pd.concat([A,B], ignore_index=True) 
merged[3] = pd.Series(merged.index).astype(str) + '.txt' 
merged 
Out[93]: 
    1 2  3 
0 0.2 0.3 0.txt 
1 0.4 0.6 1.txt 
2 0.1 0.8 2.txt 
3 3.0 4.5 3.txt 

如果你堅持索引是1型,你可以重新分配給它,然後運行我上面的代碼:

In [100]: 

merged = pd.concat([A,B], ignore_index=True) 
merged.index = np.arange(1, len(merged) + 1) 
merged[3] = pd.Series(index=merged.index, data=merged.index.values).astype(str) + '.txt' 
merged 
Out[100]: 
    1 2  3 
1 0.2 0.3 1.txt 
2 0.4 0.6 2.txt 
3 0.1 0.8 3.txt 
4 3.0 4.5 4.txt 

作爲一個方面不是我覺得有點不可思議我必須以指定排列在系列構造函數的索引值是正確的。

+0

@DSM您更清晰的眼睛讓我更加仔細地重新閱讀的問題,所以我返工我的答案 – EdChum

1

這裏有一個去了解它

In [207]: df1 
Out[207]: 
    col1 col2 txt 
0 0.2 0.3 1.txt 
1 0.4 0.6 2.txt 

In [208]: df2 
Out[208]: 
    col1 col2 txt 
0 0.1 0.8 1.txt 
1 3.0 4.5 2.txt 

In [209]: df1.append(df2, ignore_index=True) 
Out[209]: 
    col1 col2 txt 
0 0.2 0.3 1.txt 
1 0.4 0.6 2.txt 
2 0.1 0.8 1.txt 
3 3.0 4.5 2.txt 

In [217]: dff = df1.append(df2, ignore_index=True) 

In [218]: dff['txt'] = dff.index.map(lambda x: '%d.txt' % (x+1)) 

In [219]: dff 
Out[219]: 
    col1 col2 txt 
0 0.2 0.3 1.txt 
1 0.4 0.6 2.txt 
2 0.1 0.8 3.txt 
3 3.0 4.5 4.txt 
+1

感謝@約翰!我希望最後一列也要更新。 PLZ看看我的樣本.... – user308827

+0

所以在第3行,我們現在應該有3.txt而不是1.txt – user308827

+0

@ user308827更新版本的作品? – Zero