在问题的最后更新了一种更简单的方法.
我有一个用户 - 用户相关矩阵matrixcorr_of_user,如下所示:
userId 316 320 359 370 910
userId
316 1.000000 0.202133 0.208618 0.176050 0.174035
320 0.202133 1.000000 0.242837 0.019035 0.031737
359 0.208618 0.242837 1.000000 0.357620 0.175914
370 0.176050 0.019035 0.357620 1.000000 0.317371
910 0.174035 0.031737 0.175914 0.317371 1.000000
Run Code Online (Sandbox Code Playgroud)
对于每个用户,我只想保留与他最相似的其他 2 个用户(排除对角线元素后每行的最高相关值).像这样:
Out[40]:
userId 316 320 359 370 910
corr_user
316 NaN 0.202133 0.208618 NaN NaN
320 0.202133 NaN 0.242837 NaN NaN
359 NaN 0.242837 NaN 0.357620 NaN …Run Code Online (Sandbox Code Playgroud) 让我们说我pd.Series喜欢下面的内容
s = pd.Series([False, True, False,True,True,True,False, False])
0 False
1 True
2 False
3 True
4 True
5 True
6 False
7 False
dtype: bool
Run Code Online (Sandbox Code Playgroud)
我想知道最长的True序列有多长,在这个例子中,它是3.
我以一种愚蠢的方式尝试过它.
s_list = s.tolist()
count = 0
max_count = 0
for item in s_list:
if item:
count +=1
else:
if count>max_count:
max_count = count
count = 0
print(max_count)
Run Code Online (Sandbox Code Playgroud)
它会打印3,但最重要的Series是True,它会打印出来0
举例来说,我已经是df1并且df2在不同的领域:
df1 = pd.DataFrame({"question":["q1","q2"], "answer":["a1","a2"], "domain":"tech"})
df2 = pd.DataFrame({"question":["q3","q4"], "answer":["a3","a4"], "domain":"history"})
print(df1)
question answer domain
0 q1 a1 tech
1 q2 a2 tech
print(df2)
question answer domain
0 q3 a3 history
1 q4 a4 history
Run Code Online (Sandbox Code Playgroud)
我想要的是混洗后的数据:
print(shuffled1)
question answer domain
0 q3 a3 history
1 q1 a1 tech
print(shuffled2)
question answer domain
0 q2 a2 tech
1 q4 a4 history
Run Code Online (Sandbox Code Playgroud)
在现实世界中,我有来自不同域的 60 多个具有相同结构的 csv 文件。每个文件有 50k 条记录。它们不能同时读入内存。
我想要做的是将这些文件输入到 Bert 模型中进行训练,但是如果模型从“历史”域中学习 10k 步的数据,然后从另外 10k 步的“技术”域中学习,则该模型会做得不好。所以我想打乱文件中的数据,使多个域的数据均匀分布在每个文件中。
import pandas as pd
dic = {'A': [np.nan, 4, np.nan, 4], 'B': [9, 2, 5, 3], 'C': [0, 0, 5, 3]}
df = pd.DataFrame(dic)
df
Run Code Online (Sandbox Code Playgroud)
如果我有如下数据
A B C
0 NaN 9 0
1 4.0 2 0
2 NaN 5 5
3 4.0 3 3
Run Code Online (Sandbox Code Playgroud)
我想选择A列的原始NaN值,并用np.nan替换B列的值,如下所示.
A B C
0 NaN NaN 0
1 4.0 2.0 0
2 NaN NaN 5
3 4.0 3.0 3
Run Code Online (Sandbox Code Playgroud)
我试过df[df.A.isna()]["B"]=np.nan,但它没有用.
根据这个页面,我应该选择数据df.iloc.但问题是如果df有很多行,我就无法通过输入索引选择数据.
用户-用户相似度矩阵,其中某些行具有重复的值,并且 NaN
userId 316 320 359 370 910
userId
316 1.0 0.500000 0.500000 0.500000 NaN
320 0.5 1.000000 0.242837 0.019035 0.031737
359 0.5 0.242837 1.000000 0.357620 0.175914
370 0.5 0.019035 0.357620 1.000000 0.317371
910 NaN 0.031737 0.175914 0.317371 1.000000
Run Code Online (Sandbox Code Playgroud)
我想对每行的相似性分别进行排名。像这样:
userId 316 320 359 370 910
userId
316 1 2 3 4 NaN
320 2 1 3 5 1
359 2 4 1 3 5
370 2 5 3 1 4
910 NaN 4 3 2 1
Run Code Online (Sandbox Code Playgroud)
相同值之间的等级并不重要。但这必须是一个独特的价值。并且 …