如何比较熊猫中的一对单词?



我有两个这样的列:

col     count
(A,B)    19
(C,D)    18
(E,F)    10
(B,A)    9
(D,C)    80

我想要这个:

如果存在(pair2,pair1),则对col中的每一对(pair1,pair2)选择count较高的一对

output:

col     count
(A,B)    19
(E,F)    10
(D,C)    80

您可以使用DataFrameGroupBy.idxmax来获取最大的count索引值分组,按排序和转换列表到元组:

g = df['col'].apply(lambda x: tuple(sorted(x)))
df = df.loc[df.groupby(g)['count'].idxmax()]
print (df)
col  count
0  (A, B)     19
4  (D, C)     80
2  (E, F)     10

另一个想法是使用np.sort对值进行排序,并传递第一个和第二个1d数组:

g = np.sort(df['col'].tolist(), axis=1)
df = df.loc[df.groupby([g[:, 0], g[:, 1]])['count'].idxmax()]
print (df)
col  count
0  (A, B)     19
4  (D, C)     80
2  (E, F)     10

编辑:

如果输入值是元组,另一个解决方案:

df = (pd.DataFrame(np.sort(df['col'].tolist(), axis=1), 
index=df.index, 
columns=['key1','key2'])
.join(df)
.sort_values(['key1','key2','count'])
.drop_duplicates(['key1','key2'], keep='last')
.drop(['key1','key2'], axis=1))
print (df)
col  count
3  (B, A)     19
1  (C, D)     80
2  (E, F)     10

如果有,连接的字符串:

df = (pd.DataFrame(np.sort(df['col'].str.split(',').tolist(), axis=1), 
index=df.index, 
columns=['key1','key2'])
.join(df)
.sort_values(['key1','key2','count'])
.drop_duplicates(['key1','key2'], keep='last')
.drop(['key1','key2'], axis=1)
)
print (df)
col  count
0  A,B     19
4  D,C     80
2  E,F     10

最新更新