当前位置: 首页 > 知识库问答 >
问题:

Pandas:确定从唯一行到原始数据帧的映射

秦涵涤
2023-03-14
In [18]: input
Out[18]:
   1  2   3  4
0  1  5   9  1
1  2  6  10  2
2  1  5   9  1
3  1  5   9  1

In [26]: df = input.drop_duplicates()
Out[26]:
   1  2   3  4
0  1  5   9  1
1  2  6  10  2
resultant = [0, 1, 0, 0] 

虽然这个例子在我的例子中是微不足道的,但作为一个例子,我有大量可能映射到一个索引的丢弃映射。

我为什么要这个?我正在训练一个自动编码器类型的系统,其中目标序列是非唯一的。

共有1个答案

锺英卫
2023-03-14

一种方法是将其视为所有列上的groupby:

>> df.groupby(list(df.columns)).groups
{(1, 5, 9, 1): [0, 2, 3], (2, 6, 10, 2): [1]}

另一种方法是sort然后进行比较,这在理论上效率较低,但在某些情况下可能更快,而且肯定更容易使错误容忍度更高:

>>> ds = df.sort(list(df.columns))
>>> eqs = (ds != ds.shift()).all(axis=1).cumsum()
>>> ds.index.groupby(eqs)
{1: [0, 2, 3], 2: [1]}

在我看来,这是正确的数据结构,但如果您真的想要一个包含组ID的数组,这也很容易,例如。

>>> eqs.sort_index() - 1
0    0
1    1
2    0
3    0
dtype: int64
 类似资料:
  • 我有一个pandas数据帧,如下所示: 我希望将第0行添加到数据帧的末尾,并获得如下所示的新数据帧: 我在熊猫身上能做什么来做到这一点?

  • 有两个数据帧 输入 df1 df2 映射具有相似列的两个数据帧 从df2获取至少计数为2的匹配列。这里的和与带有2个值的df1匹配 预期产出:

  • 我有一个熊猫,如下所示: 我想按进行分组并获取每个组的第一行: 预期成果: 我尝试了下面的方法,它只给出了< code>DataFrame的第一行。任何关于这方面的帮助都将不胜感激。

  • 问题内容: 我有一个带有timeindex和3列的数据帧,其中包含3D矢量的坐标: 我想对也返回向量的每一行应用转换 但是如果我这样做: 我最后得到了一个以元组为元素的熊猫系列。这是因为apply将在不解压的情况下获取myfunc的结果。如何更改myfunc,以便获得具有3列的新df? 编辑: 以下所有解决方案均有效。Series解决方案确实允许使用列名,而List解决方案的执行速度似乎更快。 问

  • 是否可以附加到不包含任何索引或列的空数据帧? 我已经尝试过这样做,但最终还是得到了一个空的数据帧。 例如。 结果如下所示: