Python Pandas如何找到共同发生的顶级字符串?

时间:2016-11-15 13:40:07

标签: python pandas numpy

我已经使用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

2 个答案:

答案 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