gpt4 book ai didi

python - Pandas 融化功能

转载 作者:太空狗 更新时间:2023-10-29 17:28:38 27 4
gpt4 key购买 nike

我有一个数据框:

df = pd.DataFrame([[2, 4, 7, 8, 1, 3, 2013], [9, 2, 4, 5, 5, 6, 2014]], columns=['Amy', 'Bob', 'Carl', 'Chris', 'Ben', 'Other', 'Year'])
   Amy  Bob  Carl  Chris  Ben  Other  Year
0 2 4 7 8 1 3 2013
1 9 2 4 5 5 6 2014

还有一本字典:

d = {'A': ['Amy'], 'B': ['Bob', 'Ben'], 'C': ['Carl', 'Chris']}

我想 reshape 我的数据框,使其看起来像这样:

    Group   Name  Year  Value
0 A Amy 2013 2
1 A Amy 2014 9
2 B Bob 2013 4
3 B Bob 2014 2
4 B Ben 2013 1
5 B Ben 2014 5
6 C Carl 2013 7
7 C Carl 2014 4
8 C Chris 2013 8
9 C Chris 2014 5
10 Other 2013 3
11 Other 2014 6

请注意,OtherName 列中没有任何值,行的顺序无关紧要。我想我应该使用 melt 函数,但我遇到的例子不太清楚。

最佳答案

melt 让你分道扬镳。

In [29]: m = pd.melt(df, id_vars=['Year'], var_name='Name')

Group 外,它包含所有内容。为此,我们还需要稍微 reshape d

In [30]: d2 = {}

In [31]: for k, v in d.items():
for item in v:
d2[item] = k
....:

In [32]: d2
Out[32]: {'Amy': 'A', 'Ben': 'B', 'Bob': 'B', 'Carl': 'C', 'Chris': 'C'}

In [34]: m['Group'] = m['Name'].map(d2)

In [35]: m
Out[35]:
Year Name value Group
0 2013 Amy 2 A
1 2014 Amy 9 A
2 2013 Bob 4 B
3 2014 Bob 2 B
4 2013 Carl 7 C
.. ... ... ... ...
7 2014 Chris 5 C
8 2013 Ben 1 B
9 2014 Ben 5 B
10 2013 Other 3 NaN
11 2014 Other 6 NaN

[12 rows x 4 columns]

并将“其他”从 Name 移至 Group

In [8]: mask = m['Name'] == 'Other'

In [9]: m.loc[mask, 'Name'] = ''

In [10]: m.loc[mask, 'Group'] = 'Other'

In [11]: m
Out[11]:
Year Name value Group
0 2013 Amy 2 A
1 2014 Amy 9 A
2 2013 Bob 4 B
3 2014 Bob 2 B
4 2013 Carl 7 C
.. ... ... ... ...
7 2014 Chris 5 C
8 2013 Ben 1 B
9 2014 Ben 5 B
10 2013 3 Other
11 2014 6 Other

[12 rows x 4 columns]

关于python - Pandas 融化功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34830597/

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