I have the following single column DataFrame:
df:
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:
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