Pandas:列向量的成对串联

时间:2017-03-07 03:11:12

标签: python pandas permutation

我正在使用像

这样的框架
function rot13(str) {
  var reStr = "";
  var asciiCodedArr = [70, 82, 69, 69, 32, 67, 79, 68, 69, 32, 67, 65, 77, 80];
  reStr = String.fromCharCode.apply(null, asciiCodedArr);
  return reStr;
}

console.log(rot13("SERR PBQR PNZC"));

我想操纵它,以便列是当前列的成对排列,例如所有列现在都是10个元素长,例如列' G1:G2'会有专栏' G2'附加到列' G1'。我附上了一张模拟照片。请注意,与上述示例代码不同,pic已命名索引。我可以使用或不使用索引。

我怎么能接近这个?我可以创建一个函数来对每一列进行操作,但我认为该函数必须返回通过与所有其他列连接而生成的数据帧。不确定那会是什么样子。

enter image description here

2 个答案:

答案 0 :(得分:2)

我这样做

{{1}}

enter image description here

答案 1 :(得分:1)

这是一种方法,虽然我怀疑可能还有一种方法可以直接在熊猫中做到这一点

error: function(er, err, error){
  alert(error);
};

这是输出的一部分

为了避免创建列表并使用itertools.permutations是生成器的事实:

from itertools import permutations

'''Get all the column permutations'''
lst = [x for x in permutations(df.columns, 2)]

'''Create a list of columns names'''
names = [x[0]+'_'+x[1] for x in lst]

'''Create the new arrays by vertically stacking pairs of column values'''
cols = [np.vstack((df[x[0]].values,df[x[1]].values)).ravel() for  x in lst]

'''Create a dictionary with column names as keys and the arrays as values'''
d = dict(zip(names, cols))

'''Create new dataframe from dict'''
df2 = pd.DataFrame(d)

df2

   G1_G2  G1_G3  G1_G4  G1_G5  G2_G1  G2_G3  G2_G4  G2_G5  G3_G1  G3_G2  \
0   1.00   1.00   1.00   1.00   0.03   0.03   0.03   0.03   0.05   0.05   
1   0.69   0.69   0.69   0.69   0.41   0.41   0.41   0.41   0.40   0.40   
2   0.23   0.23   0.23   0.23   0.74   0.74   0.74   0.74   0.15   0.15   
3   0.22   0.22   0.22   0.22   0.35   0.35   0.35   0.35   0.32   0.32   
4   0.62   0.62   0.62   0.62   0.62   0.62   0.62   0.62   0.19   0.19   
5   0.03   0.05   0.30   0.40   1.00   0.05   0.30   0.40   1.00   0.03   
6   0.41   0.40   0.20   0.36   0.69   0.40   0.20   0.36   0.69   0.41   
7   0.74   0.15   0.51   0.88   0.23   0.15   0.51   0.88   0.23   0.74   
8   0.35   0.32   0.70   0.10   0.22   0.32   0.70   0.10   0.22   0.35   
9   0.62   0.19   0.67   0.19   0.62   0.19   0.67   0.19   0.62   0.62