如何在Pandas的数据框中将列合并为单一列?

huangapple go评论113阅读模式
英文:

How to merge columns into single column in dataframe pandas?

问题

  1. import pandas as pd
  2. # Original dataframe
  3. data_1 = [['Jack', 'Everdeen', 10000, 20000],
  4. ['Rita', 'Lawrence', 4000, 2000],
  5. ['Amy', 'Donnie', 5000, 9000]]
  6. df_1 = pd.DataFrame(data_1, columns=['Parent', 'Family Name', 'Money A', 'Money B'], dtype=float)
  7. # Melt the dataframe to achieve the desired format
  8. melted_df = pd.melt(df_1, id_vars=['Parent', 'Family Name'], var_name='Money', value_name='Amount')
  9. # Sort the melted dataframe by 'Parent' and 'Family Name'
  10. sorted_df = melted_df.sort_values(by=['Parent', 'Family Name'])
  11. print(sorted_df)

Output:

  1. Parent Family Name Money Amount
  2. 0 Jack Everdeen Money A 10000.0
  3. 3 Jack Everdeen Money B 20000.0
  4. 1 Rita Lawrence Money A 4000.0
  5. 4 Rita Lawrence Money B 2000.0
  6. 2 Amy Donnie Money A 5000.0
  7. 5 Amy Donnie Money B 9000.0

This code will give you the desired output by melting the original dataframe and sorting it accordingly.

英文:

Original dataframe

  1. Parent Family Name Money A Money B
  2. Jack Everdeen 10000 20000
  3. Rita Lawrence 4000 2000
  4. Amy Donnie 5000 9000

What I want.

  1. Parent Family Name Money Money
  2. Jack Everdeen Money A 10000
  3. Jack Everdeen Money B 20000
  4. Rita Lawrence Money A 4000
  5. Rita Lawrence Money B 2000
  6. Amy Donnie Money A 5000
  7. Amy Donnie Money B 9000

I tried it with pivot function but it does not work. My code is as follows.

  1. data_1 = [['Jack','Everdeen',10000,20000],['Rita','Lawrence',4000,2000],['Amy','Donnie',5000,9000]]
  2. df_1 = pd.DataFrame(data_1,columns=['Parent','Family Name','Money A','Money B'],dtype=float)
  3. print(df_1)
  4. loading_pivot_table = pd.pivot_table(df_1
  5. ,index = ['Parent','Family Name']
  6. ,columns = ['Parent','Family Name']
  7. ,values = ['Money A','Money B']
  8. ,fill_value = 0)
  9. #convert pivot table to DataFrame
  10. loading_pivot_table_convert = loading_pivot_table.reset_index()
  11. print(loading_pivot_table_convert)

答案1

得分: 1

  1. pd.melt(df_1, id_vars=['Parent','Family Name'], var_name='MoneyCol', value_name='Money').sort_values('Parent',ascending=False)
英文:

Melt it

  1. pd.melt(df_1, id_vars=['Parent','Family Name'], var_name='MoneyCol', value_name='Money').sort_values('Parent',ascending=False)
  2. Out[13]:
  3. Parent Family Name MoneyCol Money
  4. 1 Rita Lawrence Money A 4000.0
  5. 4 Rita Lawrence Money B 2000.0
  6. 0 Jack Everdeen Money A 10000.0
  7. 3 Jack Everdeen Money B 20000.0
  8. 2 Amy Donnie Money A 5000.0
  9. 5 Amy Donnie Money B 9000.0

huangapple
  • 本文由 发表于 2023年1月6日 14:12:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/75027556.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定