How can I arrange data in different columns (for different constituents) from one?
It is passing 6 days from your question and I didn't want to waste your chance of getting an appropriate response by answering. So, my solution might be naive.

Step 1: Changing the categorical data of column Sample to numerical

dictionary = {'SITE_NAME':['SITE_7_1', 'SITE_7_1','SITE_7_1'], 
'SAMP_DATE_TIME':['10/04/1988 00:00:00', '10/04/1988 00:00:00', ' 10/04/1988 00:00:00'],
 'SAMPLE':['Aluminium','Aluminium','Beryllium'],
 'Value':[150, 150,5]} 
import pandas as pd
dataset = pd.DataFrame(dictionary) 
X = dataset.iloc[:,:].values

from sklearn.preprocessing import LabelEncoder
labelencoder_X = LabelEncoder() #Creating an object from LabelEncoder class
X[:,2] =labelencoder_X.fit_transform(X[:,2])


Result so far: 

array([['SITE_7_1', '10/04/1988 00:00:00', 0, 150],
       ['SITE_7_1', '10/04/1988 00:00:00', 0, 150],
       ['SITE_7_1', ' 10/04/1988 00:00:00', 1, 5]], dtype=object)


Step 2 Adding the dummy variables as columns

dummies = pd.get_dummies(dataset['SAMPLE'])   
df = pd.concat([dataset, dummies], axis=1)  #concating the dataset and the dummies


The result so far:

  SITE_NAME        SAMP_DATE_TIME     SAMPLE  Value  Aluminium  Beryllium
0  SITE_7_1   10/04/1988 00:00:00  Aluminium    150          1          0
1  SITE_7_1   10/04/1988 00:00:00  Aluminium    150          1          0
2  SITE_7_1   10/04/1988 00:00:00  Beryllium      5          0          1


Step 3: filling the dataframe

The logic for filling the values in their corresponding columns is as follows :

for i in range(len(df)): 
    if df.iloc[i]['SAMPLE'] == 'Aluminium': 
         df.at[i, 'Aluminium'] = df.iloc[i]['Value']



If we want to apply this to the whole dataset, we can change that Aluminium each time for different samples
After this, you can groupby your dataframe to have the rows based on SITE_NAME or whatever you want.
feel free to ask if there is any vague point here.

Filling in the whole table

samples = list(df['SAMPLE'].unique()) #storing all the unique values of the SAMPLE column


Creating a dictionary of samples as keys and their values as values:

dictionary = {}
df_new = df.groupby(['SAMPLE'], as_index=False).mean() #dataframe in which `SAMPLE` is grouped.
for i in range(len(df_new)):
    dictionary[df_new.iloc[i]['SAMPLE']] = df_new.iloc[i]['Value']


now dictionary equals:
{'Aluminium': 150, 'Beryllium': 5}
Now we can fill in the table:

for sample in samples: 
    for i in range(len(df)): 
        if df.iloc[i][str(sample)] == 1:
            df.at[i, str(sample)] = dictionary[str(sample)]