假如
df1,
col1 | col2 | col3 | col4 |
A | 131 | 666 | 777 |
B | 123 | 345 | 435 |
C | 1424 | 3214 | 2314 |
df2,
col1 | col2 | col3 | col4 |
A | 10 | 1 | 0 |
B | 20 | 14 | 68 |
C | 23 | 43 | 4 |
我想要實作的最終 df,
col1 | col2 | col3 | col4 |
A | 131 (10%) | 666 (1%) | 777 |
B | 123 (20%) | 345 (14%) | 435 (68%) |
C | 1424 (23%) | 3214 (43%) | 2314 (4%) |
PS 數字是隨機的
uj5u.com熱心網友回復:
或者applymap:
>>> (df1.set_index('col1').astype(str).add(df2.set_index('col1')
.applymap(lambda x: f' ({x}%)' if x else ''))
.reset_index())
col1 col2 col3 col4
0 A 131 (10%) 666 (1%) 777
1 B 123 (20%) 345 (14%) 435 (68%)
2 C 1424 (23%) 3214 (43%) 2314 (4%)
>>>
df2如果不是,則此代碼使用百分號添加字串0。它用于set_index合并相同的col1,并用于對其applymap進行格式化。
uj5u.com熱心網友回復:
您可以將 DataFrames 轉換為字串,替換0為缺失值,添加( %),因此不會為缺失值添加,最后添加DataFrame:
df = ((df1.set_index('col1').astype(str)
(' (' df2.set_index('col1').astype(str).replace('0', np.nan) '%)').fillna(''))
.reset_index())
print (df)
col1 col2 col3 col4
0 A 131 (10%) 666 (1%) 777
1 B 123 (20%) 345 (14%) 435 (68%)
2 C 1424 (23%) 3214 (43%) 2314 (4%)
另一個想法是通過DataFrame.mask以下方式測驗值:
df11 = df1.set_index('col1').astype(str)
df22 = df2.set_index('col1').astype(str)
df = (df11 (' (' df22 '%)').mask(df22.eq('0'), '')).reset_index()
print (df)
col1 col2 col3 col4
0 A 131 (10%) 666 (1%) 777
1 B 123 (20%) 345 (14%) 435 (68%)
2 C 1424 (23%) 3214 (43%) 2314 (4%)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/324632.html
上一篇:將表連接在一起
