所以我得到了一个如下所示的数据框: Original DataFrame
df = pd.DataFrame({'0': ['a', 'b', 'c', 'd'],
'1': [123,145,293,403],
'2': [402,103,242,757],
'3': [3.121,4.55,0,9.32],
'4': ['3T', '4B', '400B', '400T']})
并且我需要转换该 DataFrame 使其看起来像这样:
a_1 | a_2 | a_3 | a_4 | b_1 | b_2 | b_3 | b_4 | ... |
---|---|---|---|---|---|---|---|---|
123 | 402 | 3.121 | 3T | 145 | 103 | 4.555 | 4B | ... |
有人知道如何用熊猫来做吗?
答案 0 :(得分:3)
您可以使用 stack()
然后使用 transpose
s = df.set_index('0').stack()
s.index = [f"{x}_{y}" for x,y in s.index]
s.to_frame('').T
a_1 a_2 a_3 a_4 b_1 b_2 b_3 b_4 c_1 c_2 c_3 c_4 d_1 d_2 d_3 \
123 402 3.121 3T 145 103 4.55 4B 293 242 0 400B 403 757 9.32
d_4
400T
答案 1 :(得分:1)
您可以旋转数据框,然后重命名和排序其列:
tmp = df.assign(ix=0).pivot('ix', '0', list('1234'))
result = tmp.set_axis(['{1}_{0}'.format(*i) for i in tmp.columns], axis=1).sort_index(axis=1)
根据您的数据,它按预期提供:
a_1 a_2 a_3 a_4 b_1 b_2 b_3 ... c_2 c_3 c_4 d_1 d_2 d_3 d_4
0 123 402 3.121 3T 145 103 4.55 ... 242 0.0 400B 403 757 9.32 400T
[1 rows x 16 columns]