在熊猫中将非唯一值拆分为唯一值

时间:2018-09-28 05:01:40

标签: python-3.x pandas pandas-groupby

我的问题是我的数据(CSV文件)是重复值。但是顺序值对彼此很重要,对彼此而言并不重要。我需要按col a中类似的值对行进行分组,但对于仅彼此接近的值。
 IE表示(2,1)= [[0.5,1.5],[1.2,2.3],(2,2)= [[1.3,0.5],[2.5,1.5]],依此类推。

     col a          posX           pos y
  0  1               0.5             1.5
  1  1               1.2             2.3
  2  2               1.3             0.5
  3  2               2.5             1.5
  4  3               0.7             0.7
  5  3               1.6             4.0
  6  3               2.1             5.1
  7  1               1.2             2.4
  8  1               1.5             2.5
  9  1               1.6             2.6
  10 2               2.0             1.5

因此(2,1)!=(3,1)它们包含可能不同的长度或不同的值

我的数据很大,有25000行 因此我不能确定 (2,1)不会出现多次,所以我不能使用length作为唯一值键

我正在努力合并这些数据而不合并所有这些值,因为当您使用

df.groupby['col a']

它将所有1放在一起。

谢谢

编辑以澄清预期结果并提供更多信息

2 个答案:

答案 0 :(得分:0)

我相信需要帮助者Series

g = df['col a'].ne(df['col a'].shift()).cumsum()
df.groupby(g)

答案 1 :(得分:0)

所以我设法弄清楚了这个问题。我在大学里更习惯Java,所以花了一些时间才找出问题所在

创建一个空的np.Array很困难。有必要知道您要初始化的数组的确切大小。我这样做是因为我认为最好的方法是逐行预先填充此空Array,即[[x1,y1], [x2,y2]...]

我将需要使用的值series = df.groupby(['t', 'col a'])进行了分组,t是知道col a何时重置的值

给我一​​系列用唯一的密钥col a重设的长度数字(t1, 1), (t2, 1),每行在每一行中包含一个pd.Dataframe

将分组后的系列加到列表中并循环显示列表

unpacked = [x for x in series]
vec_list = list()             # empty list to store the array
for v in unpacked:
    df = v[1]                 # v[0] is the key and v[1] is the dataframe of the grouped value
    x = df.values             # turns the entire df into np.array! 
    vec_list.append(x)

vec_list将包含分组的np.Array列表

相关问题