【问题标题】:Using Panda Data Frame to process csv file使用 Panda Data Frame 处理 csv 文件
【发布时间】:2018-04-03 05:08:15
【问题描述】:

谁能告诉我如何将此表转换为其他状态?

row data:

就像这样:

                                frequency
event  day       enrollment_id           
access 01         14333                  2
                  14343                 14
                  14391                  1
                  14469                  1
                  35220                  9
                  35307                  2
                  35442                  2
                  61263                  1
                  140486                 1
       02         14320                  9
                  14321                  4
                  14322                 30
                  14324                  3
                  14325                  2
wiki   01         35517                  1
                  76933                  1
                  111900                 3
       02         47872                  1
                  47875                  1
                  148426                 1
       03         60416                  1
                  96487                  2
                  96502                  2
                  96505                  1
                  96513                  2
       2014-07-24 200888                 1

【问题讨论】:

  • 你需要创建MultiIndex吗?然后需要df = df.set_index(['event', 'day', 'enrollment_id'])
  • 检查this...
  • 嗯,你能解释更多你需要什么吗?创建MultiIndex DataFrame?或者将二级表单日期时间更改为天?

标签: pandas dataframe


【解决方案1】:

您可以使用this function

演示:

# first copy the file contents into clipboard
In [184]: df = read_clipboard_mi(index_names_row=1)

In [185]: df
Out[185]:
                                 frequency
event  day        enrollment_id
access 01         14333                  2
                  14343                 14
                  14391                  1
                  14469                  1
                  35220                  9
                  35307                  2
                  35442                  2
...                                    ...
wiki   02         148426                 1
       03         60416                  1
                  96487                  2
                  96502                  2
                  96505                  1
                  96513                  2
       2014-07-24 200888                 1

[26 rows x 1 columns]

In [186]: df.index
Out[186]:
MultiIndex(levels=[['access', 'wiki'], ['01', '02', '03', '2014-07-24'], [14320, 14321, 14322, 14324, 14325, 14333, 14343, 14391, 14469, 352
20, 35307, 35442, 35517, 47872, 47875, 60416, 61263, 76933, 96487, 96502, 96505, 96513, 111900, 140486, 148426, 200888]],
           labels=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1
, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 3], [5, 6, 7, 8, 9, 10, 11, 16, 23, 0, 1, 2, 3, 4, 12, 17, 22, 13, 14, 24, 15, 18, 19, 20, 21, 25]],
           names=['event', 'day', 'enrollment_id'])

PS 你可以很容易地采用这个功能从文件而不是剪贴板中读取...

【讨论】:

    【解决方案2】:

    我认为如果需要将MultiIndex 的第二级更改为天:

    a = df.index.get_level_values(0)
    b = df.index.get_level_values(1).day
    c = df.index.get_level_values(2)
    df.index = pd.MultiIndex.from_arrays([a,b,c], names=['event', 'day', 'enrollment_id'])
    

    但如果需要计算第二级 b 使用:

    b = df.groupby(level=1).cumcount().add(1).astype(str).str.zfill(2)
    

    如果需要创建 MultiIndex DataFrame:

    df = pd.read_csv(file).set_index(['event', 'day', 'enrollment_id'])
    

    【讨论】:

      猜你喜欢
      • 2017-04-01
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多