У меня есть кадр данных pandas, который содержит набор данных iris
. Я хочу задать для этого фрейма данных только значения sepal_length
и species
, а затем изменить его так, чтобы столбцы представляли собой уникальные значения для species
, а значения - значения для этого вида.
# load data into a dataframe
df = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
head(df)
+----+---------------+--------------+---------------+--------------+---------+
| | sepal_length | sepal_width | petal_length | petal_width | species |
+----+---------------+--------------+---------------+--------------+---------+
| 0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa |
| 1 | 4.9 | 3.0 | 1.4 | 0.2 | setosa |
| 2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa |
| 3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa |
| 4 | 5.0 | 3.6 | 1.4 | 0.2 | setosa |
+----+---------------+--------------+---------------+--------------+---------+
Я могу сделать это, я беру данные из Панд, так как использую словарь для изменения данных, но я не могу понять, как это сделать в Пандах.
data = df.to_dict('records')
e = {}
for line in data:
e[line['species']] = []
for line in data:
e[line['species']].append(line['sepal_length'])
new = pd.DataFrame(e)
Вот что я хочу закончить:
+----+---------+-------------+-----------+
| | setosa | versicolor | virginica |
+----+---------+-------------+-----------+
| 0 | 5.1 | 7.0 | 6.3 |
| 1 | 4.9 | 6.4 | 5.8 |
| 2 | 4.7 | 6.9 | 7.1 |
| 3 | 4.6 | 5.5 | 6.3 |
| 4 | 5.0 | 6.5 | 6.5 |
+----+---------+-------------+-----------+
Я пытался использовать pd.crosstab(df['sepal_length'], df['species'])
, но это не дает мне то, что я хочу. Я также пытался использовать df.pivot_table('sepal_length', columns='species')
, и это тоже не так.
Что мне здесь не хватает?