В python
3.6.3 с pandas
0.22.0 вы также можете использовать concat
до тех пор, пока вы установите в качестве индекса столбцы, которые вы хотите использовать для соединения
pd.concat(
(iDF.set_index('name') for iDF in [df1, df2, df3]),
axis=1, join='inner'
).reset_index()
где df1
, df2
и df3
определяются так же, как в ответе Джона Галта
import pandas as pd
df1 = pd.DataFrame(np.array([
['a', 5, 9],
['b', 4, 61],
['c', 24, 9]]),
columns=['name', 'attr11', 'attr12']
)
df2 = pd.DataFrame(np.array([
['a', 5, 19],
['b', 14, 16],
['c', 4, 9]]),
columns=['name', 'attr21', 'attr22']
)
df3 = pd.DataFrame(np.array([
['a', 15, 49],
['b', 4, 36],
['c', 14, 9]]),
columns=['name', 'attr31', 'attr32']
)
Вы можете сделать что-то вроде этого:
select case when action in ('YES') then CAST(price AS DECIMAL(10,2))
when action in ('NO') then LEFT(price, 4)
else price end as RoundPrice
для тестирования:
SELECT CAST(1.1264 AS DECIMAL(10,2))
SELECT LEFT(1.1264,4)
Надеюсь, это поможет
В итоге я использовал окольный способ использования функции CEILING
, см. Ниже для SQL:
case when action in ('YES') then round(price, 3, 1)
when action in ('NO') then CEILING(price*1000)/1000
else price end as RoundPrice