Python 生成一个新的数据帧,该数据帧由唯一的userid和其他列中的模式组成

Python 生成一个新的数据帧,该数据帧由唯一的userid和其他列中的模式组成,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,所以我的数据框看起来像这样 userID. A. B. C 1. X. O. 1 2. X. N. 2 1. X. O. 3 1. Y. O. 4 每个唯一的用户ID可以出现任意次数。我要做的是生成一个新的Pandas数据帧,其中每一行包含一个唯一的userID ID,列a、B、C的值是这些唯一用户的模式。如果任何列的模式是绑定的,则任何绑定的值都可以。下面的例子就是我要找的 userID

所以我的数据框看起来像这样

userID.   A.   B.   C
  1.      X.   O.   1   
  2.      X.   N.   2
  1.      X.   O.   3
  1.      Y.   O.   4
每个唯一的用户ID可以出现任意次数。我要做的是生成一个新的Pandas数据帧,其中每一行包含一个唯一的userID ID,列a、B、C的值是这些唯一用户的模式。如果任何列的模式是绑定的,则任何绑定的值都可以。下面的例子就是我要找的

userID.   A.   B.   C
  1.      X.   O.   1
  2.      X.   N.   2
我在这里看到了一个类似的帖子(),但这并不是我想要的

userID.   A.   B.   C
  1.      X.   O.   1
  2.      X.   N.   2
更复杂的例子

UserID.       A.   B.   C
      1.      Y.   O.   1   
      2.      X.   N.   2
      1.      X.   O.   3
      1.      Y.   O.   4
      1.      X.   O.   1   
      2.      X.   N.   2
      1.      X.   O.   3
      1.      Y.   O.   4
      1.      X.   O.   1   
      2.      X.   N.   2
      1.      X.   O.   3
      1.      Y.   O.   4
将得到相同的结果:

userID.   A.   B.   C
  1.      X.   O.   1
  2.      X.   N.   2

编辑:注意,我使用X,0,1作为值。实际上,这些值可以是str、float、int。

您可以使用
GroupBy.mode
,然后使用
dropna

df = df.groupby('userID.').apply(lambda x: x.iloc[:, 1:].mode()).dropna()

           A.  B.  C
userID.             
1       0  X.  O.  1
2       0  X.  N.  2
要修复索引,请使用
reset\u index

df = (
    df.groupby('userID.').apply(lambda x: x.iloc[:, 1:].mode())
      .dropna().reset_index(level=0).reset_index(drop=True)
)

   userID.  A.  B.  C
0        1  X.  O.  1
1        2  X.  N.  2
或更简洁,如前所述:

df = df.groupby('userID.', as_index=False).agg(lambda x: x.mode()[0])

   userID.  A.  B.  C
0        1  X.  O.  1
1        2  X.  N.  2

df.groupby('UserID',as_index=False).agg(lambda x:x.mode()[0])
x.iloc[:,1:]的目的是防止获取列的模式
UserID
iloc[:,1://code>的意思是:“从第二行获取所有行和列”@QwertyQwertsAh谢谢。似乎我得到了一个索引器:索引越界错误。作为旁注,我得到的是一个警告UserWarning:cannot sort modes:'看起来您的示例数据帧并不能很好地表示您的实际数据,因为我在两个数据帧上都尝试了我的解决方案,并且得到了正确的输出<代码>iloc
是造成这种情况的原因,我认为。在
piRSquared
@QwertyQwerts底部尝试解决方案