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底部尝试解决方案