gpt4 book ai didi

python - 如何转换这个 Pandas Dataframe?

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

我有一个数据框,它只包含一周的最后 14 天,每个天都有一个整数值。我想像下面这样组合一周中每一天的值。

这是我的数据框:

    Day     Total
0 Tue 66
1 Wed 54
2 Thu 47
3 Fri 60
4 Sat 41
5 Sun 44
6 Mon 73
7 Tue 67
8 Wed 51
9 Thu 56
10 Fri 47
11 Sat 42
12 Sun 43
13 Mon 46

...我希望它看起来像这样...

    Day     Total1  Total2
0 Tue 66 67
1 Wed 54 51
2 Thu 47 56
3 Fri 60 47
4 Sat 41 42
5 Sun 44 43
6 Mon 73 46

这样每一天都有两个值而不是一个值。

在 Pandas 中是否有一种奇特的方法可以做到这一点?

最佳答案

首先比较由 iat 选择的 Day 的第一个值包含 Day 列和 cumsum创建新列。然后使用 pivotset_index + unstack , 最后添加 add_suffix :

df['col'] = df['Day'].eq(df['Day'].iat[0]).cumsum()
df = df.pivot(index='Day', columns='col', values='Total').add_prefix('Total')
print (df)

col Total1 Total2
Day
Fri 60 47
Mon 73 46
Sat 41 42
Sun 44 43
Thu 47 56
Tue 66 67
Wed 54 51

另一种解决方案:

df['col'] = df['Day'].eq(df['Day'].iat[0]).cumsum()
df = df.set_index(['Day', 'col'])['Total'].unstack().add_prefix('Total')
print (df)
col Total1 Total2
Day
Fri 60 47
Mon 73 46
Sat 41 42
Sun 44 43
Thu 47 56
Tue 66 67
Wed 54 51

如果想按days 排序索引需要ordered categorical :

days = ['Sun', 'Mon','Tue', 'Wed', 'Thu', 'Fri', 'Sat' ]
df['Day'] = df['Day'].astype('category', categories=days, ordered=True)
df['col'] = df['Day'].eq(df['Day'].iat[0]).cumsum()
df = df.set_index(['Day', 'col'])['Total'].unstack().add_prefix('Total')
print (df)
col Total1 Total2
Day
Sun 44 43
Mon 73 46
Tue 66 67
Wed 54 51
Thu 47 56
Fri 60 47
Sat 41 42

如需原单使用reindex_axis :

df['col'] = df['Day'].eq(df['Day'].iat[0]).cumsum()
a = df.loc[df['col'] == 1, 'Day']
df = df.set_index(['Day', 'col'])['Total'].unstack()
.add_prefix('Total')
.reindex_axis(a, axis=0)
.reset_index()
.rename_axis(None, axis=1)
print (df)
Day Total1 Total2
0 Tue 66 67
1 Wed 54 51
2 Thu 47 56
3 Fri 60 47
4 Sat 41 42
5 Sun 44 43
6 Mon 73 46

关于python - 如何转换这个 Pandas Dataframe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44656458/

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