我有一个从excel文件中读取的数据框。问题是前4列和它的值看起来不错。但在第五列之后,数据似乎有点损坏。 也就是说,“dateID”值如“2021-09-06”变为列,sourceOfData”列变为“值”。 看起来是这样的:
但我希望我的数据是这样的:
我唯一想到的是pivot或melt。我开始这样做:
df2 = df.melt(var_name='dateID', value_name='productPrice')
df3 = df2.iloc[1:]
为了安排日期和价格,但我被卡住了
希望我能解释我的需求。提前谢谢
对于那些想重现我的问题并获取数据帧的人,下面是由我拥有的和我需要的组成的代码
import pandas as pd
whatIHave = {'countryName': ['','United States','Canada'],
'provinceName': ['','New York','Ontario'],
'productID': ['','35','55'],
'productName': ['', 'Sugar', 'Corn'],
'dateID': ['sourceOfData', 'CommissionAgent1', 'CommissionAgent1'],
'2021-09-06': ['productPrice','2.6$','2.6$'],
'2021-09-07': ['productPrice','5.5$','5.5$'],
'2021-09-08': ['productPrice','3.4$','3.4$']
}
df_whatIHave = pd.DataFrame(whatIHave, columns = ['countryName', 'provinceName', 'productID', 'productName', 'dateID', '2021-09-06', '2021-09-07', '2021-09-08'])
print(df_whatIHave)
whatINeed = {'countryName': ['United States','United States','United States', 'Canada', 'Canada', 'Canada'],
'provinceName': ['New York','New York','New York', 'Ontario', 'Ontario', 'Ontario'],
'productID': ['35','35','35', '55', '55', '55'],
'productName': ['Sugar', 'Sugar', 'Sugar', 'Corn', 'Corn', 'Corn'],
'sourceOfData': ['CommissionAgent1', 'CommissionAgent1', 'CommissionAgent1', 'CommissionAgent1', 'CommissionAgent1', 'CommissionAgent1'],
'dateID': ['2021-09-06', '2021-09-07', '2021-09-08', '2021-09-06', '2021-09-07', '2021-09-08'],
'productPrice': ['2.6$','5.5$','3.4$','2.6$','5.5$','3.4$']
}
df_whatINeed = pd.DataFrame(whatINeed, columns = ['countryName', 'provinceName', 'productID', 'productName', 'sourceOfData', 'dateID', 'productPrice'])
print(df_whatINeed)
经过数小时的搜索,我将问题分成若干部分,并将其合并,从而解决了这个问题。如果我们将数据帧视为df_,那么我们有:
我将数据帧分为两部分,并实现了stack()函数,该函数对于根据日期复制行非常重要:
然后我合并了这两个dfs,如下所示:
相关问题 更多 >
编程相关推荐