熊猫结合了数据帧

时间:2015-04-26 21:42:41

标签: python pandas

我有以下两个数据帧: 第一列是索引,最后一列是通过在其上附加'.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

我尝试使用pandas merge,但不确定如何在不使用for循环显式迭代的情况下继续使用它。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

concat作为列表并传递参数ignore_index=true,然后将索引值分配给第3列,转换为str dtype,然后附加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

作为一个方面,我发现它有点奇怪我必须在Series构造函数中指定索引值才能使对齐正确。

答案 1 :(得分: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