Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 3.x 如何在数据帧中实现以下输出_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 如何在数据帧中实现以下输出

Python 3.x 如何在数据帧中实现以下输出,python-3.x,pandas,Python 3.x,Pandas,df: 如何获得像下面这样的df category A B C D x 0 1 0 0 y 1 0 0 0 z 1 0 0 0 l 0 0 0 1 m 0 1 0 0 n 0 0 1 0 我试过: Category Sub-category x B y A z A l D m B n C 但是获取TypeError:(“此数据类型不允许使用缩减操作'

df:

如何获得像下面这样的df

category    A   B   C   D
x   0   1   0   0
y   1   0   0   0
z   1   0   0   0
l   0   0   0   1
m   0   1   0   0
n   0   0   1   0
我试过:

Category    Sub-category
x   B
y   A
z   A
l   D
m   B
n   C
但是获取TypeError:(“此数据类型不允许使用缩减操作'argmax','在索引1处发生”)

只需执行此操作即可

df['sector'] = df.apply(lambda x: df.columns[x.argmax()], axis = 1)
当然,您可以只选择所需的列

df['sub_category'] = df[['A', 'B', 'C', 'D']].idxmax(axis=1)


    category    A   B   C   D   sub_category
0   x           0   1   0   0   B
1   y           1   0   0   0   A
2   z           1   0   0   0   A
3   l           0   0   0   1   D
4   m           0   1   0   0   B
5   n           0   0   1   0   C

这不是一个代码编写服务。显示一次尝试并分享您遇到的具体问题。你还应该用panda tag
df['sub_category']=df.iloc[:,1:].astype(bool).dot(df.columns[1:])
谢谢Rafael!我们不能在这里使用函数并使用apply吗?假设我们的列列表在中更大size@VikashKumar您可以使用
apply
,但性能很差。我敢肯定它不会比
idxmax
好,我敢肯定
apply
不会更快,但是对于使用
np.where
的大型数据帧,有一种比
idxmax
更快的方法。注意这一点benchmarks@sacul很好的回答:)
df[['category', 'sub_category']]

    category    sub_category
0   x           B
1   y           A
2   z           A
3   l           D
4   m           B
5   n           C