根据列标题填充df行值

时间:2019-12-14 03:17:08

标签: regex pandas dataframe

感谢任何帮助。基本上,我的数据集很差,并且正在尝试使其更有用。

以下是表示形式

df = pd.DataFrame({'State': ("Texas","California","Florida"),
               'Q1 Computer Sales': (100,200,300),
               'Q1 Phone Sales': (400,500,600),
               'Q1 Backpack Sales': (700,800,900),
               'Q2 Computer Sales': (200,200,300),
               'Q2 Phone Sales': (500,500,600),
               'Q2 Backpack Sales': (800,800,900)})

我希望有一个df可以为相应州的Quarters和Sales创建单独的列。

我认为也许正则表达式,str。包含和循环?

.click() snapshot below

1 个答案:

答案 0 :(得分:0)

IIUC,您可以使用:

df_a = df.set_index('State')

df_a.columns = pd.MultiIndex.from_arrays(zip(*df_a.columns.str.split(' ', n=1)))

df_a.stack(0).reset_index()

输出:

        State level_1  Backpack Sales  Computer Sales  Phone Sales
0       Texas      Q1             700             100          400
1       Texas      Q2             800             200          500
2  California      Q1             800             200          500
3  California      Q2             800             200          500
4     Florida      Q1             900             300          600
5     Florida      Q2             900             300          600

或者我们可以走得更远:

df_a = df.set_index('State')

df_a.columns = pd.MultiIndex.from_arrays(zip(*df_a.columns.str.split(' ', n=1)), names=['Quarters','Items'])


df_a = df_a.stack(0).reset_index()


df_a['Quarters'] = df_a['Quarters'].str.extract('(\d+)')

print(df_a)

输出:

Items       State Quarters  Backpack Sales  Computer Sales  Phone Sales
0           Texas        1             700             100          400
1           Texas        2             800             200          500
2      California        1             800             200          500
3      California        2             800             200          500
4         Florida        1             900             300          600
5         Florida        2             900             300          600