簡體   English   中英

CSV列中所有值之間的差異-python

[英]difference between all values in csv columns - python

首先,對於python如此糟糕的水平我感到抱歉,所以我有下一個問題:

1)我在此資源上回答了很多問題,但對我沒有任何幫助( np.abs(a.values[:,np.newaxis]-a2.values)和簡單的np.diff()以及許多其他方式)

2!)我有csv文件,格式如下:

 A  12 43 51 10 74
 B  14 32 31 27 23
 C  13 62 13 33 82
 D  18 31 73 70 42

我需要在原始數據的所有列之間接收殘差,所以

A:12-43 12-51 12-10 12-74... 43-12 43-51 43-10 43-74...
B:12-43 12-51 12-10 12-74... 43-12 43-51 43-10 43-74...

之后,我需要在12-43 12-51 12-10 12-74... 43-12 43-51 43-10 43-74...電源2 12-43 12-51 12-10 12-74... 43-12 43-51 43-10 43-74...

我知道,熊貓可以與桌子搭配使用,但是我該怎么做呢?

而且,如果可以的話,請以什么方式我需要這樣做,以減少極端結果的10%? 非常感謝您的關注和功能幫助。

我建議使用numpy 為了計算差異,您可以做

>>> a = numpy.array([[12, 43, 51, 10, 74],
...                  [14, 32, 31, 27, 23],
...                  [13, 62, 13, 33, 82],
...                  [18, 31, 73, 70, 42]])
>>> difference_matrix = numpy.repeat(a, a.shape[-1], axis=-1) - numpy.tile(a, a.shape[-1])
>>> difference_matrix
array([[  0, -31, -39,   2, -62,  31,   0,  -8,  33, -31,  39,   8,   0,
         41, -23,  -2, -33, -41,   0, -64,  62,  31,  23,  64,   0],
       [  0, -18, -17, -13,  -9,  18,   0,   1,   5,   9,  17,  -1,   0,
          4,   8,  13,  -5,  -4,   0,   4,   9,  -9,  -8,  -4,   0],
       [  0, -49,   0, -20, -69,  49,   0,  49,  29, -20,   0, -49,   0,
        -20, -69,  20, -29,  20,   0, -49,  69,  20,  69,  49,   0],
       [  0, -13, -55, -52, -24,  13,   0, -42, -39, -11,  55,  42,   0,
          3,  31,  52,  39,  -3,   0,  28,  24,  11, -31, -28,   0]])

如果要對結果求平方,可以將其簡單地應用於矩陣,然后將每個元素平方:

>>> difference_matrix ** 2
array([[   0,  961, 1521,    4, 3844,  961,    0,   64, 1089,  961, 1521,
          64,    0, 1681,  529,    4, 1089, 1681,    0, 4096, 3844,  961,
         529, 4096,    0],
       [   0,  324,  289,  169,   81,  324,    0,    1,   25,   81,  289,
           1,    0,   16,   64,  169,   25,   16,    0,   16,   81,   81,
          64,   16,    0],
       [   0, 2401,    0,  400, 4761, 2401,    0, 2401,  841,  400,    0,
        2401,    0,  400, 4761,  400,  841,  400,    0, 2401, 4761,  400,
        4761, 2401,    0],
       [   0,  169, 3025, 2704,  576,  169,    0, 1764, 1521,  121, 3025,
        1764,    0,    9,  961, 2704, 1521,    9,    0,  784,  576,  121,
         961,  784,    0]])

pandas不容易接受數組作為元素,因此numpy在這里是一個很好的幫助。

首先,按行( axis=1 )進行所有axis=1

data="""
A 12 43 51 10 74
B 14 32 31 27 23
C 13 62 13 33 82
D 18 31 73 70 42
""" 
pd.read_table(io.StringIO(data),header=None,index_col=0,sep=' ')

all_differences=np.apply_along_axis(lambda x:np.subtract.outer(x,x).ravel(),axis=1,arr=df)

然后進行分界:

all_differences.sort(axis=1)

並選擇合適的值,並丟棄L[i]-L[i]得出的0。

n=df.shape[1]

cutoff =[i for i in range(n*n)  if  n*n*5//100<=i<n*(n-1)//2 or  n*(n+1)//2<=i<n*n*95//100]

res=2.**all_differences[:,cutoff]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM