【问题标题】:Changing data in a dataframe with hierarchical indexing使用分层索引更改数据框中的数据
【发布时间】:2012-12-11 02:58:28
【问题描述】:

如何使用分层索引更改 DataFrame 中的每个元素?例如,也许我想将字符串转换为浮点数:

from pandas import DataFrame
f = DataFrame({'a': ['1,000','2,000','3,000'], 'b': ['2,000','3,000','4,000']})
f.columns = [['level1', 'level1'],['item1', 'item2']]
f
Out[152]:
        level1
     item1   item2
0    1,000   2,000
1    2,000   3,000
2    3,000   4,000

我试过了:

def clean(group):
    group = group.map(lambda x: x.replace(',', ''))
    return group
f.apply(clean)
Out[153]:
(level1, item1) (level1, item2)
0    1000    2000
1    2000    3000
2    3000    4000

如您所见,它对分层索引进行了相当大的更改。我怎样才能避免这种情况?或者也许有更好的方法。

谢谢

【问题讨论】:

    标签: python pandas hierarchical


    【解决方案1】:

    axis 选项传递给apply 函数:

    In [265]: f.apply(clean, axis=1)
    Out[265]:
      level1
       item1 item2
    0   1000  2000
    1   2000  3000
    2   3000  4000
    

    当两个轴都有分层索引时,这是一种解决方法:

    In [316]: f.index = [[1,2,3],[1,2,3]]
    
    In [317]: f
    Out[317]:
        level1
         item1  item2
    1 1  1,000  2,000
    2 2  2,000  3,000
    3 3  3,000  4,000
    
    In [314]: f.apply(clean, axis=1).reindex(f.index)
    Out[314]:
        level1
         item1 item2
    1 1   1000  2000
    2 2   2000  3000
    3 3   3000  4000
    

    【讨论】:

    • 太棒了。当我使用axis = 0时,apply是否通过了包括item1、item2在内的列?当列和行中存在分层索引时会发生什么?
    • 嗯...我已经尝试过了,它“拉平”了水平。你知道解决这个问题的方法吗?
    • @RobertSmith 你用的是什么版本的熊猫? 0.10 对我来说不会变平(尽管applymap 会)。
    • 哦,对了。我安装了 0.9。所以在任何轴上都没有 0.10 的展平?
    • 不,但我的意思是当列和行中有多个级别时:f.index = [['level1', 'level1', 'level1'],['item1', ' item2', 'item2']]
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2019-11-17
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多