Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熔融函数_Python_Pandas - Fatal编程技术网

Python 熔融函数

Python 熔融函数,python,pandas,Python,Pandas,我有一个数据帧: 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其他年份 0 2 4 7 8 1 3 2013 1 9 2 4 5 5

我有一个数据帧:

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其他年份
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']}
我想将我的数据框重新设计为如下所示:

组名年份值
2013年1月2日
1 A艾米2014 9
2 B 2013年北京银行4
3 B 2014年北京银行2
4 B本2013 1
5 B本公司2014年5月5日
6 C 2013年11月7日
7 C 2014年4月4日
8 C.克里斯2013 8
9 C.克里斯2014 5
10其他2013年3
11其他2014年6

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

melt
可以部分地解决这个问题

In [29]: m = pd.melt(df, id_vars=['Year'], var_name='Name')
除了
,这里什么都有。要做到这一点,我们还需要对
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]
以及将“其他”从
名称
移动到

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]

melt
让你走到了一半

In [29]: m = pd.melt(df, id_vars=['Year'], var_name='Name')
除了
,这里什么都有。要做到这一点,我们还需要对
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]
以及将“其他”从
名称
移动到

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]

功能:-

此函数用于将数据帧转换为一个或多个列为标识符变量(id_vars)的格式,而所有其他列(被视为测量变量(value_vars))被“取消插入”到行轴,只留下两个非标识符列“variable”和“value”

例如:


我们使用melt将宽数据转换为长数据。

melt函数:-

此函数用于将数据帧转换为一个或多个列为标识符变量(id_vars)的格式,而所有其他列(被视为测量变量(value_vars))被“取消插入”到行轴,只留下两个非标识符列“variable”和“value”

例如:


我们使用melt将宽数据转换为长数据。

没有我的最终解决方案那么优雅,但你的回答让我达到了目的。谢谢虽然没有我最后的解决方案那么优雅,但你的回答让我达到了目的。谢谢