Deepcopy pandas DataFrame contendo objetos python (como listas)

Precisa de ajuda para entender a atribuição de variáveis, ponteiros, ...

O seguinte é reproduzíve

import pandas as pd

df = pd.DataFrame({
    'listData': [
        ['c', 'f', 'd', 'a', 'e', 'b'], 
        [5, 2, 1, 4, 3]
    ]})

df['listDataSort'] = df['listData']

gives:

             listData        listDataSort
0  [c, f, d, a, e, b]  [c, f, d, a, e, b]
1     [5, 2, 1, 4, 3]     [5, 2, 1, 4, 3]

Se eu quiser apenas classificar as listas nolistDataSort column, eu poderia tentar:

df['listDataSort'].apply(lambda l: l.sort())
df

o entanto, isso classifica as listas nas duas colunas no loca

             listData        listDataSort
0  [a, b, c, d, e, f]  [a, b, c, d, e, f]
1     [1, 2, 3, 4, 5]     [1, 2, 3, 4, 5]

Eu posso consertar isso fazendo:

df = pd.DataFrame({
    'listData': [
        ['c', 'f', 'd', 'a', 'e', 'b'], 
        [5, 2, 1, 4, 3]
    ]})

df['listDataSort'] = df['listData'].apply(sorted)

giving:

             listData        listDataSort
0  [c, f, d, a, e, b]  [a, b, c, d, e, f]
1     [5, 2, 1, 4, 3]     [1, 2, 3, 4, 5]

Atribuindo df a uma variável diferente, digamos que df2 ainda mude tudo de volta à lista de fontes originais. Além disso, como crio um novo quadro de dados com base em um quadro de dados existente para poder fazer alterações no novo quadro de dados sem fazer as mesmas alterações no quadro de dados existente?

df = pd.DataFrame({
    'listData': [
        ['c', 'f', 'd', 'a', 'e', 'b'], 
        [5, 2, 1, 4, 3]
    ]})

df2 = df
print('\ndf\n', df)
print('\ndf2\n', df2)

df2['listDataSort'] = df2['listData']
print('\ndf\n', df)
print('\ndf2\n', df2)

df2['listDataSort'].apply(lambda l: l.sort())
print('\ndf\n', df)
print('\ndf2\n', df2)

prints:

df
             listData
0  [c, f, d, a, e, b]
1     [5, 2, 1, 4, 3]

df2
             listData
0  [c, f, d, a, e, b]
1     [5, 2, 1, 4, 3]

df
             listData        listDataSort
0  [c, f, d, a, e, b]  [c, f, d, a, e, b]
1     [5, 2, 1, 4, 3]     [5, 2, 1, 4, 3]

df2
             listData        listDataSort
0  [c, f, d, a, e, b]  [c, f, d, a, e, b]
1     [5, 2, 1, 4, 3]     [5, 2, 1, 4, 3]

df
             listData        listDataSort
0  [a, b, c, d, e, f]  [a, b, c, d, e, f]
1     [1, 2, 3, 4, 5]     [1, 2, 3, 4, 5]

df2
             listData        listDataSort
0  [a, b, c, d, e, f]  [a, b, c, d, e, f]
1     [1, 2, 3, 4, 5]     [1, 2, 3, 4, 5]

Além disso

df = pd.DataFrame({
    'listData': [
        ['c', 'f', 'd', 'a', 'e', 'b'], 
        [5, 2, 1, 4, 3]
    ]})
print('\ndf\n', df)

df3 = df
df3['listDataSort'] = df3['listData'].apply(sorted)
print('\ndf\n', df)
print('\ndf3\n', df3)

prints:

df
             listData
0  [c, f, d, a, e, b]
1     [5, 2, 1, 4, 3]

df
             listData        listDataSort
0  [c, f, d, a, e, b]  [a, b, c, d, e, f]
1     [5, 2, 1, 4, 3]     [1, 2, 3, 4, 5]

df3
             listData        listDataSort
0  [c, f, d, a, e, b]  [a, b, c, d, e, f]
1     [5, 2, 1, 4, 3]     [1, 2, 3, 4, 5]

questionAnswers(1)

yourAnswerToTheQuestion