我有以下两个数据帧: 第一列是索引,最后一列是通过在其上附加'.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循环显式迭代的情况下继续使用它。有什么建议吗?
答案 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