我有两个数据帧将从CSV文件中提取:
X Value 1 Value 2
0 1 2 1
1 3 4 -2
2 3 3 8
3 -1 4 2
4 6 -8 2
5 0 10 1
X Value 1 Value 2
0 1 2 1
1 3 4 -1
2 3 4 8
3 -1 4 2
4 6 -8 2
5 0 9 1
我想使用Python Pandas来获得这样的输出,它将是第二个数据框,但是对于任何已经改变的值,它将在其更改量的括号内加上/减去: / p>
X Value 1 Value 2
0 1 2 1
1 3 4 -1 (+1)
2 3 4 (+1) 8
3 -1 4 2
4 6 -8 2
5 0 9 (-1) 1
我在网上找到的解决方案中唯一接近使用Panels的解决方案已被弃用,所以我想避免使用它们。此外,我希望最终输出为数据帧,以便我可以应用样式。
答案 0 :(得分:2)
您可以sub
使用applymap
第一个和最后add
原始df2
转换为string
:
DataFrames
DataFrames
df = df2.sub(df1).applymap(lambda x: ' ({0:+d})'.format(x) if x != 0 else '')
print (df)
X Value 1 Value 2
0
1 (+1)
2 (+1)
3
4
5 (-1)
df3 = df2.astype(str).add(df)
print (df3)
X Value 1 Value 2
0 1 2 1
1 3 4 -1 (+1)
2 3 4 (+1) 8
3 -1 4 2
4 6 -8 2
5 0 9 (-1) 1
答案 1 :(得分:2)
你可以得到df2和df1之间的区别并创建+或 - 标志,然后将其附加到df2。
df2.astype(str) + \
(df2-df1).applymap(lambda x: ' ({}{})'\
.format('+' if x > 0 else '', str(x)).replace('(0)',''))
Out[240]:
X Value 1 Value 2
0 1 2 1
1 3 4 -1 (+1)
2 3 4 (+1) 8
3 -1 4 2
4 6 -8 2
5 0 9 (-1) 1
答案 2 :(得分:1)
没有格式化技巧:
(df2.astype(str)+"("+(df2-df1).astype(str)+")").applymap(
lambda s:s.replace("(0)","").replace("(","(+").replace("+-","-"))
for:
X Value1 Value2
0 1 2 1
1 3 4 -1(+1)
2 3 4(+1) 8
3 -1 4 2
4 6 -8 2
5 0 9(-1) 1