【问题标题】:How to reshape a dataframe (different type in columns)如何重塑数据框(列中的不同类型)
【发布时间】:2019-07-19 21:19:21
【问题描述】:

我已经看到了很多关于这个话题的不同答案。在我的情况下,情况有点不同,我有以下数据框

     A    B      C  
0  OPXXX  OPT1 70
1  OPXXX  OPT2 KO
2  OPXXX  OPT3 KO
3  OPXXX  OPT4 B
4  OPXXX  OPT5 175000
5  OPXXX  OPT6 Europ
6  OPXXX  OPT7 2019-01-21
7  OPXXX  OPT8 2019-05-21
8  OPXXX  OPT9 2019-10-21

我想要这样,但问题是 pivot.table 由于聚合功能而无法正常工作:

 A     OPT1  OPT2 OPT3 OPT4 OPT5   OPT6         OPT7       OPT8         OPT9    
OPXXX   70     KO    KO   B 175000  Europe    2019-01-21  2019-10-21  2019-10-21      

当我这样做时:df.pivot(index='A',values='C', columns='B')

我有以下错误

Traceback(最近一次调用最后一次):文件 “C:/Users/V002697/PycharmProjects/portia/tiaex.py”,第 17 行,在 print(df.pivot(index='ticker',values='value', columns='field')) 文件 "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", 第 3853 行,在枢轴上 返回枢轴(自我,索引=索引,列=列,值=值)文件 "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", 第 378 行,在枢轴上 返回 indexed.unstack(columns) 文件 "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py", 第 2028 行,在 unstack 中 返回 unstack(self, level, fill_value) 文件 "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", 第 458 行,在 unstack 中 fill_value=fill_value) 文件 "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", 第 110 行,在 init 中 self._make_selectors() 文件 "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", 第 148 行,在 _make_selectors raise ValueError('Index contains duplicate entries, ' ValueError: Index contains duplicate entries, cannot reshape

我想知道你有什么想法吗?

谢谢

【问题讨论】:

  • 错误是说你在'B'中有重复的项目,因此它不能被做成索引。
  • 在“A”列中,我的示例中有重复项,“B”没有任何重复项
  • 您提供的示例工作得很好。你能检查len(df.B) - df.B.nunique()是否为0吗?
  • 你太棒了,谢谢我不得不为同一列计时

标签: python pandas pivot pivot-table


【解决方案1】:

df1 = df.rename(columns={'A':'A1', 'B':'B1', 'A1':'A2', 'B1':'B2'}).reset_index() pd.wide_to_long(df1, stubnames=['A', 'B'], i='index', j='id')\ .reset_index()[['A', 'B', 'id']]

A   B id

0 1 2 1 1 5 6 1 2 9 10 1 3 3 4 2 4 7 8 2 5 11 12 2

【讨论】:

    【解决方案2】:

    你可以使用pandas.DataFrame.pivot:

    df.pivot(index='A', columns = 'B', values='C')
    
    B     OPT1 OPT2 OPT3 OPT4    OPT5   OPT6        OPT7        OPT8        OPT9
    A                                                                           
    OPXXX   70   KO   KO    B  175000  Europ  2019-01-21  2019-05-21  2019-10-21
    

    【讨论】:

    • 我已经试过这个我有 df.pivot(index=["A"],values=["C"], columns= 'B'):ine 3853, in pivot return pivot(self, index=index, columns=columns, values=values), line 377, in pivot index=MultiIndex.from_arrays([index, self[columns]]))
    • 你试过没有[]吗?即"A" 而不是["A"]?
    • 我试过 df.pivot(index='A',values='C', columns= 'B') 但我仍然有同样的错误
    • df.pivot(index='A',values='c', columns= 'field') 指的是不在给定问题示例中的列。如果您可以分享任何其他信息,请编辑您的问题:)
    • 拼错你太快了 :) df.pivot(index='A',values='C', columns= 'B')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2011-03-29
    • 2021-07-07
    • 1970-01-01
    相关资源
    最近更新 更多