【问题标题】:From tuples to multiple columns in pandas从元组到熊猫中的多列
【发布时间】:2014-10-22 22:18:58
【问题描述】:

如何转换此数据帧

位置值 0(美国弗吉尼亚州里士满)100 1 (纽约市, 纽约, 南, 美国) 200

到这里:

城市 州 地区 国家 价值 0 里士满弗吉尼亚州南美国 100 1 纽约市 纽约南美国 200

请注意,第一个数据框中的 location 列包含元组。我想从location 列中创建四列。

【问题讨论】:

    标签: python pandas tuples


    【解决方案1】:
    new_col_list = ['city','state','regions','country']
    for n,col in enumerate(new_col_list):
        df[col] = df['location'].apply(lambda location: location[n])
    
    df = df.drop('location',axis=1)
    

    【讨论】:

      【解决方案2】:

      如果您返回一系列(拆分)位置,您可以将生成的 DF 直接与您的值列合并(joinmerge on index)。

      addr = ['city', 'state', 'region', 'country']
      df[['value']].join(df.location.apply(lambda loc: Series(loc, index=addr)))
      
         value           city     state  region country
      0    100       Richmond  Virginia     NaN     USA
      1    200  New York City  New York     NaN     USA
      

      【讨论】:

      • 谢谢。 @exp1orer 的解决方案有效,所以我不必尝试您的解决方案。
      • 做得很好!如果我没记错的话,它只有在df 的索引是range(len(df)) 时才有效,对吧?
      • @exp1orer 不完全是。 join 是合并索引与两个帧的简写,因此索引只需要保持一致(它会在这里,因为应用和 col 选择不会影响它)。我会编辑答案。
      • 应该早点考虑到这一点,但值得注意的是,由于创建了所有系列,这比@exp1orer 在较大框架上的解决方案慢很多
      【解决方案3】:

      我没有计时,但我建议这个选项:

      df.loc[:,'city']=df.location.map(lambda x:x[0])
      df.loc[:,'state']=df.location.map(lambda x:x[1])
      df.loc[:,'regions']=df.location.map(lambda x:x[2])
      df.loc[:,'country']=df.location.map(lambda x:x[3])
      

      我猜测避免显式 for 循环可能适合 SIMD 指令(当然 numpy 会寻找它,但可能不是其他库)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-04
        • 1970-01-01
        • 2018-11-01
        • 2017-05-24
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        • 2013-05-09
        相关资源
        最近更新 更多