[英]Combining two data frames and showing their difference - Python Pandas
我有兩個將從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獲得這樣的輸出,它將是第二個數據幀,但是對於任何已更改的值,括號中的值將通過以下方式加/減:
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一起使用的解決方案的唯一方法已被棄用,因此我想避免使用它們。 另外,我希望最終輸出是一個數據框,以便可以對其應用樣式。
您可以applymap
sub
和applymap
一起使用,最后add
轉換為string
s的原始df2
:
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
您可以得到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
沒有格式化技巧:
(df2.astype(str)+"("+(df2-df1).astype(str)+")").applymap(
lambda s:s.replace("(0)","").replace("(","(+").replace("+-","-"))
為:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.