如何根据python中多个其他列的名称创建一个列?

时间:2018-01-16 16:54:25

标签: python python-2.7 pandas dataframe

说我有以下数据框:

ID   Brick    Vinyl     Stone
1    Yes      No         No
2    No       Yes        No
3    No       No         Yes
4    Yes      Yes        No
5    No       No         No

如何根据这些列的名称创建新列,以便我最终得到以下内容?

ID   Brick    Vinyl     Stone    Type
1    Yes      No         No      Brick
2    No       Yes        No      Vinyl
3    No       No         Yes     Stone
4    Yes      Yes        No      Multiple
5    No       No         No      Other

请注意,ID 4和5要么是'是'对于多列或全部为“否”'。我在' Type'中记录的回复对于这两个条目,不必是多个'或者'其他'特别是 - 如果有一种默认的方式来记录所需的信息,那么它也会起作用。谢谢!

1 个答案:

答案 0 :(得分:3)

你可以做到

In [146]: s = df[['Brick', 'Vinyl', 'Stone']].eq('Yes')

In [147]: sm = s.sum(1)

In [148]: df['Type'] = np.where(sm.eq(0), 'Other', 
                                np.where(sm.eq(2), 'Multiple', s.idxmax(1)))

In [149]: df
Out[149]:
   ID Brick Vinyl Stone      Type
0   1   Yes    No    No     Brick
1   2    No   Yes    No     Vinyl
2   3    No    No   Yes     Stone
3   4   Yes   Yes    No  Multiple
4   5    No    No    No     Other