Python 3.x 如何在数据帧中实现以下输出
df: 如何获得像下面这样的dfPython 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:(“此数据类型不允许使用缩减操作'
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