如何提取某些列和行以将它们堆叠在一起?

我使用以下数据创建了一个简单的示例数据框:

data = {'d1':[101,201,301,401],
        'd2':[102,202,302,402],
        'd3':[103,203,303,403],
        'd4':[104,204,304,404]
        }

dfa = pd.DataFrame(data, index=['t1','t2','t3','t4'])
dfa
     d1   d2   d3   d4
t1  101  102  103  104
t2  201  202  203  204
t3  301  302  303  304
t4  401  402  403  404


这就是我想要得到的:

   d1_d2_d3-t1-t2
1             101
2             201
3             102
4             202
5             103
6             203


我想获得的另一种格式是在两列中:

   d1_d2_d3-t1-t2  d1_d2_d3-t3-t4
1             101             301
2             201             401
3             102             302
4             202             402
5             103             303
6             203             403


所需结果中的标题仅用于说明

最佳答案

使用DataFrame.loc进行过滤,使用DataFrame.melt进行整形:

idx = ['t1','t2']
cols = ['d1','d2', 'd3']
df = dfa.loc[idx, cols].melt(value_name='data')[['data']]


另一个解决方案是将值转换为numpy数组,由numpy.ravel展平,并通过构造函数创建新的DataFrame:

df = pd.DataFrame({'data': dfa.loc[idx, cols].values.ravel()})




print (df)
   data
0   101
1   201
2   102
3   202
4   103
5   203

idx1 = ['t1','t2']
idx2 = ['t3','t4']
cols = ['d1','d2', 'd3']
df = pd.concat([dfa.loc[idx1, cols].melt(value_name='data1')[['data1']],
                dfa.loc[idx2, cols].melt(value_name='data2')[['data2']]], axis=1)


要么:

df = pd.DataFrame({'data1': dfa.loc[idx1, cols].values.ravel(),
                   'data2': dfa.loc[idx2, cols].values.ravel()})




print (df)
   data1  data2
0    101    301
1    201    401
2    102    302
3    202    402
4    103    303
5    203    403

关于python - 如何设置 Pandas 提取某些列的某些行并将它们堆叠在彼此之上?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55920437/

10-12 17:24