我有以下数据框:
data = {'POSTING_AMOUNT1': [10,20,30], 'POSTING_AMOUNT2': [100,200,300],
'POSTING_AMOUNT3': [15,25,35], 'POSTING_AMOUNT4': [20,40,60]}
我的预期输出需要如下:
专栏 | 发帖_金额 |
---|---|
1 | 10 |
1 | 20 |
1 | 30 |
2 | 100 |
2 | 200 |
2 | 300 |
3 | 15 |
3 | 25 |
3 | 35 |
4 | 20 |
4 | 40 |
4 | 60 |
我尝试使用 pandas .melt 函数,但没有成功。我认为的问题是我正在手动尝试将标签分配给“列”列。这是我在其他尝试中尝试过的:
melted = pd.melt(df, id_vars=[1,2,3,4], value_vars=['POSTING_AMOUNT1', 'POSTING_AMOUNT2', 'POSTING_AMOUNT3',
'POSTING_AMOUNT4'], var_name='Column', value_name='Posting_Amount')
一种选择是使用 pandass' Wide_to_long:
df = pd.DataFrame(data)
(pd.wide_to_long(
df.reset_index(),
i = 'index',
stubnames='POSTING_AMOUNT',
j = 'column')
.reset_index('column')
)
column POSTING_AMOUNT
index
0 1 10
1 1 20
2 1 30
0 2 100
1 2 200
2 2 300
0 3 15
1 3 25
2 3 35
0 4 20
1 4 40
2 4 60
另一个选择是使用pyjanitor的pivot_longer:
# pip install pyjanitor
import janitor
import pandas as pd
df.pivot_longer(names_to = ('.value', 'Column'), names_pattern = r"(.+)(\d)")
Column POSTING_AMOUNT
0 1 10
1 1 20
2 1 30
3 2 100
4 2 200
5 2 300
6 3 15
7 3 25
8 3 35
9 4 20
10 4 40
11 4 60