【问题标题】:Python pandas how to duplicate certain columnsPython pandas如何复制某些列
【发布时间】:2020-12-12 07:45:31
【问题描述】:

我有一个数据框行:

key1 key2 key3 val1 val2 val3 .. valn
 a    b    c     1   2     3      14

我想复制值列:

key1 key2 key3 val1_0 val2_0 val3_0 .. valn_0 val1_1 val2_1 val3_1 .. valn_1
 a    b    c     1     2      3          14     1       2     3      14

最好的方法是什么?

【问题讨论】:

  • 使用pd.concat([df,df.filter(like="val")],axis=1)

标签: python pandas dataframe data-science data-munging


【解决方案1】:

试试

s = df.filter(like='val')
df = pd.concat([df.drop(s.columns,1),s.add_suffix('_0'),s.add_suffix('_1')],axis=1)
df
Out[106]: 
  key1 key2 key3  val1_0  val2_0  ...  valn_0  val1_1  val2_1  val3_1  valn_1
0    a    b    c       1       2  ...     NaN       1       2       3     NaN
[1 rows x 11 columns]

【讨论】:

    【解决方案2】:

    最简单的方法是对列进行迭代,检查它是否为数字并复制它。

    import pandas as pd
    from pandas.api.types import is_numeric_dtype
    
    df = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': [1.0, 2.0, 3.0]})
    
    columns = df.columns
    for col in columns:
        if is_numeric_dtype(df[col]):
            df[col + '_1'] = df[col]
    print(df.columns)
    >> ['A','B','B_0']
    

    【讨论】:

      【解决方案3】:

      从 df.columns 获取所有列名。然后进行字符串操作,例如添加 df 列名称独有的内容。然后在赋值部分循环遍历新列名,并将旧列赋值给它。

      伪代码

      for x in df.columns:
      
          df[x+"new"] =df[x]
      

      【讨论】:

        猜你喜欢
        • 2013-11-19
        • 2019-02-03
        • 2013-08-01
        • 2019-07-22
        • 2016-08-28
        • 2016-02-12
        相关资源
        最近更新 更多