Пользовательская функция
def process_details(details):
cols, *data = np.reshape(details, (-1, 3))
return pd.DataFrame(data, columns=cols)
Я использую np.reshape
, потому что я к этому привык. Однако это может сделать то же самое.
def process_details(details):
cols, *data = zip(*[iter(details)] * 3)
return pd.DataFrame(data, columns=cols)
Бок о бок
Поскольку имена столбцов не совпадают
pd.concat({
cat: process_details(details)
for cat, details in zip(*map(df.get, df))
}, sort=False, axis=1)
Animal Food
Name Predator? Habitat Name Color Sweet?
0 Tigers Yes Forests Bread Brown No
1 Lions Yes Savanna Rice White No
2 Deers No Hardwoods Sushi N/A No
Но если вы настаиваете на их укладке
pd.concat({
cat: process_details(details)
for cat, details in zip(*map(df.get, df))
}, sort=False)
Name Predator? Habitat Color Sweet?
Animal 0 Tigers Yes Forests NaN NaN
1 Lions Yes Savanna NaN NaN
2 Deers No Hardwoods NaN NaN
Food 0 Bread NaN NaN Brown No
1 Rice NaN NaN White No
2 Sushi NaN NaN N/A No