假设我有一组数据框
df1是
ID C1
0 0 0.000000
1 1 0.538516
2 2 0.509902
3 3 0.648074
4 4 0.141421
df2是
ID C1
0 0 0.538516
1 1 0.000000
2 2 0.300000
3 3 0.331662
4 4 0.608276
和df3是
ID C1
0 0 0.509902
1 1 0.300000
2 2 0.000000
3 3 0.244949
4 4 0.509902
然后我继续转换这三个数据框。
df1 = df1.T
df2 = df2.T
df3 = df3.T
现在数据框是:
df1是
0 1 2 3 4
ID 0 1 2 3 4
C1 0 0.538516 0.509902 0.648074 0.141421
df2是:
0 1 2 3 4
ID 0 1 2 3 4
C1 0.538516 0 0.3 0.331662 0.608276
和df3是:
0 1 2 3 4
ID 0 1 2 3 4
C1 0.509902 0.3 0 0.244949 0.509902
我可以以某种方式将所有数据帧组合起来
0 1 2 3 4
0 0.538516 0.509902 0.648074 0.141421
0.538516 0 0.3 0.331662 0.608276
0.509902 0.3 0 0.244949 0.509902
然后单独对行进行排序,以便对结果数据框中的每一行进行排序?
例如,带有排序行的数据框将是
0 0.141421 0.509902 0.538516 0.648074
0 0.3 0.331662 0.538516 0.608276
0 0.244949 0.3 0.509902 0.509902
自从我转换数据框以来,我遇到了concat的问题。
感谢所有帮助
答案 0 :(得分:2)
更新:已排序的数据集且无需转置:
E/MediaPlayer: Error (1,-2147483648)
<强>解释强>
In [64]: pd.DataFrame([np.sort(x['C1'].values) for x in dfs], columns=d1.index)
Out[64]:
0 1 2 3 4
0 0.0 0.141421 0.509902 0.538516 0.648074
1 0.0 0.300000 0.331662 0.538516 0.608276
2 0.0 0.244949 0.300000 0.509902 0.509902
现在我们可以从已排序的NumPy数组列表中创建一个DataFrame,并将In [67]: d1
Out[67]:
ID C1
0 0 0.000000
1 1 0.538516
2 2 0.509902
3 3 0.648074
4 4 0.141421
In [68]: d1['C1'].values
Out[68]: array([ 0. , 0.538516, 0.509902, 0.648074, 0.141421])
In [69]: np.sort(d1['C1'].values)
Out[69]: array([ 0. , 0.141421, 0.509902, 0.538516, 0.648074])
In [70]: [np.sort(x['C1'].values) for x in dfs]
Out[70]:
[array([ 0. , 0.141421, 0.509902, 0.538516, 0.648074]),
array([ 0. , 0.3 , 0.331662, 0.538516, 0.608276]),
array([ 0. , 0.244949, 0.3 , 0.509902, 0.509902])]
指定为列:
d1.index
答案 1 :(得分:2)
df1 = pd.DataFrame({
'C1': [0.0, 0.538516, 0.509902, 0.648074, 0.141421],
'ID': [0, 1, 2, 3, 4]})
df2 = pd.DataFrame({
'C1': [0.538516, 0.0, 0.3, 0.331662, 0.608276],
'ID': [0, 1, 2, 3, 4]})
df3 = pd.DataFrame({
'C1': [0.509902, 0.3, 0.0, 0.244949, 0.509902],
'ID': [0, 1, 2, 3, 4]})
看起来您的ID
列很重要,或许您希望加入该列。我将其设置为您的索引然后合并。
要对每一行进行排序,我会留下列并应用sort_values
df = pd.concat(
[d.set_index('ID') for d in [df1, df2, df3]], ignore_index=True, axis=1)
df.apply(lambda x: x.sort_values().values).T
ID 0 1 2 3 4
0 0.0 0.141421 0.509902 0.538516 0.648074
1 0.0 0.300000 0.331662 0.538516 0.608276
2 0.0 0.244949 0.300000 0.509902 0.509902
获取您的数据框并在numpy
df = pd.concat([d.set_index('ID').T for d in [df1, df2, df3]], ignore_index=True)
v = df.values
a = v.argsort(1)
i = np.arange(a.shape[0])[:, None]
df.loc[:] = v[i, a]
df
ID 0 1 2 3 4
0 0.0 0.141421 0.509902 0.538516 0.648074
1 0.0 0.300000 0.331662 0.538516 0.608276
2 0.0 0.244949 0.300000 0.509902 0.509902