【问题标题】:Turning table data into columns and counting by frequency将表格数据转成列并按频率计数
【发布时间】:2016-10-06 14:11:59
【问题描述】:

我有一个如下形式的数据框:

形状为 2326 x 1271

列名只是从 0-1269 序列化,而行是可以重复的类别,如示例中的“苹果”。内部数据点可以代表任何东西(假设它们在本例中代表商店),我试图将它们转换为列,并让数据点成为该类别在该“商店”中出现的次数。从视觉上看,这是我要到达的表格:

请注意,Apple 在 AA 和 RR 中出现了两次

【问题讨论】:

  • 尝试 pivot 或 pivot_table 函数

标签: python pandas reshape


【解决方案1】:

使用stackcrosstab 计算频率计数:

数据:

index= ['Apple', 'Orange', 'Apple', 'Banana', 'Kiwi']
data = [['AA', 'DD', 'RR', ''], ['DD', 'PP', '', ''], 
        ['AA', 'RR', 'TT', 'SS'], ['EE', 'NN', '',''], ['NN', 'WW','', '']]
frame = pd.DataFrame(data, index, columns=np.arange(4))
frame

操作:

df = frame.stack().reset_index(0, name='values')
df = pd.crosstab(df['level_0'], df['values']).drop('', axis=1).replace(0, '')
df.index.name=None; df.columns.name=None
df

【讨论】:

  • 这可能是赢家。一个问题,“.drop (...)”之后发生了什么?当我保留它时给我一个“''不包含在轴中”错误,但如果没有整个删除和重命名似乎不起作用
  • 我认为你可以完全省略.drop('', axis=1)。使用它的原因是在执行crosstab 操作后创建了一个额外的列。没有它也可以正常工作。看看它在crosstab 部分之前是否有效。休息纯粹是为了美观。
猜你喜欢
  • 2021-08-19
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 2014-04-11
  • 2019-06-14
  • 1970-01-01
相关资源
最近更新 更多