我已经使用Python pandas库生成了一个共生矩阵,其代码如下:
# dfdo is an ordered dictionary with a key called KEY453
df = pd.DataFrame(dfdo).set_index('KEY453')
df_asint = df.astype(int)
com = df_asint.T.dot(df_asint)
它遵循与this问题相同的程序。
我的问题是,我怎样才能找到与矩阵中给定字符串共存的前2个字符串?例如,下面示例中与Dog共同出现的前2个字符串是Cat和Zebra。
Cat Dog Zebra
Cat 0 2 3
Dog 2 0 1
Zebra 3 1 0
答案 0 :(得分:3)
我认为您可以使用nlargest
:
DataFrame
如果需要print (np.argsort(-df.values, axis=1)[:, :2])
[[2 1]
[0 2]
[0 1]]
print (df.columns[np.argsort(-df.values, axis=1)[:, :2]])
Index([['Zebra', 'Dog'], ['Cat', 'Zebra'], ['Cat', 'Dog']], dtype='object')
print (pd.DataFrame(df.columns[np.argsort(-df.values, axis=1)[:, :2]],
index=df.index,
columns=['first','second']))
first second
Cat Zebra Dog
Dog Cat Zebra
Zebra Cat Dog
的所有值都使用numpy.argsort
:
apply
或print (df.apply(lambda x: pd.Series(x.nlargest(2).index, index=['first','second']), axis=1))
first second
Cat Zebra Dog
Dog Cat Zebra
Zebra Cat Dog
:
<div id=switcher>
答案 1 :(得分:3)
选项1
nlargest
然后df.stack().nlargest(1)
Cat Zebra 3
dtype: int64
stack
选项2
idxmax
然后df.stack().idxmax()
('Cat', 'Zebra')
xpath-default-namespace