gpt4 book ai didi

python - 如何设置 Pandas 提取某些列的某些行并将它们堆叠在一起?

转载 作者:行者123 更新时间:2023-12-01 07:57:08 25 4
gpt4 key购买 nike

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

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

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 reshape :

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com