gpt4 book ai didi

python - Pandas 数据框从窄到宽,数据透视表没有聚合

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:40 25 4
gpt4 key购买 nike

我有一个包含 iris 数据集的 pandas 数据框。我想将此数据框子集化为仅包含 sepal_lengthspecies,然后 reshape 它,以便列是 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 |
+----+---------------+--------------+---------------+--------------+---------+

我可以做到这一点,因为我将数据从 Pandas 中提取出来,因为使用字典来 reshape 数据,但我不知道如何在 Pandas 中执行此操作。

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') 也不是这样。

我在这里错过了什么?

最佳答案

您可以使用 IIUC grouby.cumcountspecies col 上设置索引,然后使用 pivot而不是 pivot_table它不需要 agg 函数。

df1 = df.set_index(df.groupby('species').cumcount())

df1 = df1.pivot(columns='species', values='sepal_length').rename_axis(None,axis=1)

print (df1)

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

关于python - Pandas 数据框从窄到宽,数据透视表没有聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53252391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com