Python 从另一个数据帧向数据帧添加行

Python 从另一个数据帧向数据帧添加行,python,pandas,numpy,dataframe,cluster-analysis,Python,Pandas,Numpy,Dataframe,Cluster Analysis,所以我尝试根据随机生成的行对数据帧进行排序。下面列出了数据帧。我试图做的是随机选取一行,我将在数据帧中称之为质心,然后使它使小于数据的行位于其上方,大于质心的行位于其下方。然而,我不知道如何做到这一点,我已经给出了下面的数据帧和数据,以及我用来比较行的函数。我通过对行中的值求和,并将其与质心之和进行比较来确定行是小于还是大于 有什么好办法吗 任何建议都将不胜感激 def compareRows(arr1, arr2): arr1 = sum(arr1) arr2 = sum(ar

所以我尝试根据随机生成的行对数据帧进行排序。下面列出了数据帧。我试图做的是随机选取一行,我将在数据帧中称之为质心,然后使它使小于数据的行位于其上方,大于质心的行位于其下方。然而,我不知道如何做到这一点,我已经给出了下面的数据帧和数据,以及我用来比较行的函数。我通过对行中的值求和,并将其与质心之和进行比较来确定行是小于还是大于

有什么好办法吗

任何建议都将不胜感激

def compareRows(arr1, arr2):
    arr1 = sum(arr1)
    arr2 = sum(arr2)
    return arr1 > arr2
data = np.array(pd.read_csv('https://raw.githubusercontent.com/gsprint23/cpts215/master/progassignments/files/cancer.csv',  header=None))
    data = data.T
    #print(data)
    df = pd.DataFrame(data[1:], columns=data[0], dtype=float).T
如果您需要更多信息,请告诉我

感谢您阅读

  • 使用
    pd.DataFrame.sample随机获取一行
    
    • 注意:这将返回一行数据帧
  • 创建一个没有随机行的临时数据帧
    d
  • 创建一系列布尔真值,确定哪些其他行大于我们的随机行
  • 将我们的临时数据帧子集设置为不大于,追加我们的随机行,追加临时数据帧子集,其中大于我们的随机行


几点意见:1。你的最终目标是什么?我觉得这里有一个很大的问题。我的意思是,我可以用
df.iloc[df.sum(1.argsort()]
解决这个问题,瞧,每一行都处于这样一个位置,即比较高的每一行低于该行,比较低的每一行高于该行。换言之,它被分类了。2.您是否正在尝试自己实现随机快速排序?如果是这样的话,我就不会试图每次都操纵数据框了。我试图从数据框中随机选取一行,然后让数据框中的其余行要么高于我选取的行,要么低于我选取的行,要么高于我选取的行。例如,如果我选择说第5行,那么数据帧的排序应该使小于第5行的所有行都位于其上方,而大于第5行的所有行都位于其下方。我决定这一点的方法在我上面给出的函数中显示出来。然后像这样对数据帧进行排序
df=df.iloc[df.sum(1.argsort()]
,然后用
df.sample(1)
随机选择行,我明白了,谢谢,但是我如何将df.sample(1)与其他语句结合使用呢?请原谅,我对这件事还不太熟悉。谢谢你的帮助。没问题,也不需要请求原谅。我们这些回答问题的人这样做是因为我们喜欢这样做。没有人强迫我帮助你(-:我明白这是有道理的。我如何使用df=df.iloc[df.sum(1.argsort()]有了这个?或者其他函数正在进行交换时不再需要这个了?谢谢你的帮助。如果你想做一次或几次,那么就使用这个答案。如果你想一直这样做直到所有的函数都被排序,那么不要两者都做呃,有了这个答案,只需找到每一行的总和,并相应地对数据帧进行排序……即,
df=df.iloc[df.sum(1.argsort()]
哦,好的,我现在明白了,这很有意义。非常感谢您的帮助!另一个简短的提示,是否可以使用多个点来完成此操作?例如,假设有一个数据帧有5行,我想随机选择几行,在这种情况下,让我们假设2行,我将其指定为质心1和质心2,然后对数据帧b进行排序基于这些行。在这种情况下,小于质心1的行位于其上方,大于质心1但小于质心2的行位于它们之间,大于质心2的行位于质心2下方。2,3,4..n质心是否可能?这听起来像是一个新问题。
sampled = df.sample(1)
d = df.drop(sampled.index)
gt = d.apply(compareRows, 1, arr2=sampled.squeeze())

pd.concat([d[~gt], sampled, d[gt]])
# d[~gt].append(sampled).append(d[gt])