【问题标题】:Adding rows to a Pandas dataframe from another dataframe从另一个数据帧向 Pandas 数据帧添加行
【发布时间】:2018-03-09 17:01:41
【问题描述】:

所以我试图根据随机生成的行对数据框进行排序。数据框如下所示。我正在尝试做的是随机选择一行,我将在数据框中调用质心,然后使其小于数据的行在其上方,大于质心的行在它下面。但是我不知道该怎么做,我已经给出了下面的数据框和数据以及我用来比较行的函数。我通过将行中的值相加并将其与质心的总和进行比较来确定一行是小于还是大于。

有什么好办法吗?

感谢任何建议。

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

如果您需要更多信息,请告诉我

感谢您的阅读

【问题讨论】:

  • 几个cmets: 1. 你的最终目标是什么?我在这里感觉到一个强烈的XY 问题。我的意思是,我可以用df.iloc[df.sum(1).argsort()] 解决这个问题,瞧,每一行都处于这样一个位置,即每一个比较高的行都低于该行,而较低的行高于该行。换句话说,它是排序的。 2.您是否尝试自己实现随机快速排序?如果是这样,我将尝试通过每次操作数据框来做到这一点。
  • 我正在尝试从数据框中随机选择一行,然后如果数据框中的其余行低于该行,则数据框中的其余行高于或低于该行我采摘。例如,如果我选择说第 5 行,那么应该对数据框进行排序,使得小于第 5 行的所有行都在其上方,并且所有大于第 5 行的行都在其下方。我决定的方式显示在我上面给出的函数中。
  • 然后像df = df.iloc[df.sum(1).argsort()]这样对数据框进行排序,并随机选择带有df.sample(1)的行
  • 哦,好的,我明白了,谢谢,但是我如何将 df.sample(1) 与其他语句结合使用?原谅我,我对此很陌生。不过感谢您的帮助。
  • 没问题,也不需要请求原谅。我们这些回答问题的人这样做是因为我们喜欢这样做。没有人强迫我帮助你(-:

标签: python pandas numpy dataframe cluster-analysis


【解决方案1】:
  • pd.DataFrame.sample随机抓取一排
    • 注意: 这将返回一个单行数据框
  • 创建一个没有随机行的临时数据框d
  • 创建一个布尔值系列,以确定哪些其他行大于我们的随机行
  • 将我们的临时数据帧子集在不大于的地方,附加我们的随机行,在大于我们的随机行的地方附加临时数据帧的子集

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])

【讨论】:

  • 我认为这是有道理的。我将如何使用 df = df.iloc[df.sum(1).argsort()] 这个?还是不再需要其他功能进行交换?感谢您的帮助
  • 好吧,如果您想这样做一次或几次,请使用此答案。如果您想继续这样做直到所有内容都被排序,那么不要理会这个答案,只需找到每一行的总和并相应地对数据框进行排序......即,df = df.iloc[df.sum(1).argsort()]
  • 哦,好的,我现在明白了,这是有道理的。非常感谢您的帮助!
  • 另一个快速说明,是否可以用多个点来执行此操作?例如,假设有一个 5 行的数据框,我想随机选择几行,假设 2 in这种情况下,我将其指定为 centroid1 和 centroid2,然后根据这些行对数据框进行排序。在这种情况下,小于 centroid1 的行在其上方,大于 centroid1 但小于 centroid2 的行位于它们之间,大于 centroid2 的行位于 centroid2 下方。对于 2、3、4..n 质心,这可能吗?
  • 这听起来像是一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 2018-02-23
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 2021-04-22
相关资源
最近更新 更多