【问题标题】:Tidying dataframe with one parameter per row用每行一个参数整理数据框
【发布时间】:2020-10-13 15:31:08
【问题描述】:

我有一个这样的数据框:

d = {'Date': ['2020-10-09', '2020-10-09', '2020-10-09', '2020-10-10', '2020-10-10', '2020-10-10', '2020-10-11', '2020-10-11', '2020-10-11'],
     'ID': ['T1', 'T2', 'T3', 'T1', 'T2', 'T3','T1', 'T2', 'T3'],
     'Value': [13, 12, 11, 14, 15, 16, 20, 21, 22]}
     
df = pd.DataFrame(data=d)
df

    Date    ID  Value
0   2020-10-09  T1  13
1   2020-10-09  T2  12
2   2020-10-09  T3  11
3   2020-10-10  T1  14
4   2020-10-10  T2  15
5   2020-10-10  T3  16
6   2020-10-11  T1  20
7   2020-10-11  T2  21
8   2020-10-11  T3  22

我正在努力得到:

d = {'Date': ['2020-10-09', '2020-10-10', '2020-10-11'],
     'Value T1': ['13', '14', '20'],
     'Value T2': ['12', '15', '21'],
     'Value T3': ['11', '15', '22']}
     
df = pd.DataFrame(data=d)
df


Date            Value T1    Value T2    Value T3
0   2020-10-09        13          12          11
1   2020-10-10        14          15          15
2   2020-10-11        20          21          22

我尝试使用 pivot 但出现错误: “索引包含重复条目,无法重塑”

【问题讨论】:

    标签: python-3.x pandas dataframe pivot


    【解决方案1】:

    如下图使用pd.pivot_table

    pdf = pd.pivot_table(
        df,
        values=['Value'],
        index=['Date'],
        columns=['ID'],
        aggfunc='first'
    ).reset_index(drop=False)
    
    pdf.columns = ['Date', "Value T1", "Value T2", "Value T3"]
    
    
        Date    Value T1    Value T2    Value T3
    0   2020-10-09  13  12  11
    1   2020-10-10  14  15  16
    2   2020-10-11  20  21  22
    

    请注意,这里首先是 aggfunc。这意味着如果在给定日期给定 ID 有多个值,您将获得数据框中的第一个值。您可以根据需要将其更改为 min/max/last

    【讨论】:

      猜你喜欢
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      相关资源
      最近更新 更多