Home > Net >  Create empty square Dataframe from single column DataFrame
Create empty square Dataframe from single column DataFrame

Time:11-24

I have the following single column DataFrame:

df:

enter image description here

data = {'YEAR': [2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030],
        }

df = pd.DataFrame(data)
  
df

How can I create an empty square Dataframe from df like the following DatFrame:

enter image description here

I´m kinda new to Python. I have tried converting the original Dataframme to list and the create a new dataframe from there without success. I also tried to do somekind concatenation but it does not work either.

I guess that its not as hard, but I dont know how to do that.

CodePudding user response:

Try provide both index and columns as Year when creating the data frame:

df = pd.DataFrame([], index=data['YEAR'], columns=data['YEAR'])
df
     2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030
2020  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2021  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2022  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2023  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2024  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2025  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2026  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2027  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2028  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2029  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
2030  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN

CodePudding user response:

You can also use df.dot and replace:

df.set_index('YEAR').dot(df.set_index('YEAR').T).replace({0:''})

CodePudding user response:

Use reindex:

df.reindex(columns=df.columns.union(df['YEAR']))

Output:

    YEAR  2020  2021  2022  2023  2024  2025  2026  2027  2028  2029  2030
0   2020   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
1   2021   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
2   2022   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
3   2023   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
4   2024   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
5   2025   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
6   2026   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
7   2027   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
8   2028   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
9   2029   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
10  2030   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN

CodePudding user response:

You can do this by simply using pandas.DataFrame.loc :

df.loc[:, df.set_index("YEAR").index.tolist()]= np.NaN #or ""

# Output :

print(df)

    YEAR  2020  2021  2022  2023  2024  2025  2026  2027  2028  2029  2030
0   2020   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
1   2021   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
2   2022   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
3   2023   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
4   2024   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
5   2025   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
6   2026   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
7   2027   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
8   2028   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
9   2029   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
10  2030   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
  • Related