【问题标题】:Pandas dataframe how to drop and rename column熊猫数据框如何删除和重命名列
【发布时间】:2020-08-10 12:44:02
【问题描述】:

对于如下的数据框,我尝试 1) 删除 B 列,因为它不在 Marker 的行值中,2) 然后将 A、C、D 列重命名为新名称 ColA、ColB、 ColC 根据列 New_Name 下的值。有什么方法可以做到这一点?我是否需要将列 New_Name 放入列表并遍历 Dataframe 列名 soemhow?非常感谢您的帮助。

          A     B     C      D        Marker   New_Name
         1.0   0.0   0.0    1.0        A          ColA
         1.0   0.0   0.0    0.0        C          ColC
         0.0   0.0   0.0    0.0        D          ColD

【问题讨论】:

  • 你尝试过什么吗?

标签: python pandas dataframe slice rename


【解决方案1】:
s=df.reindex(columns=df.Marker).\
    rename(columns=dict(zip(df.Marker,df.New_Name))).\
     rename_axis(None,axis=1)
s
   ColA  ColC  ColD
0   1.0   0.0   1.0
1   1.0   0.0   0.0
2   0.0   0.0   0.0

【讨论】:

  • 但是在这之后标记列中的值怎么变了?
  • @user3735871 通知变化,即索引名称
  • @user3735871 `s=df.set_index('Marker').reindex(columns=df.Marker).\ rename(columns=dict(zip(df.Marker,df.New_Name))) .\ rename_axis(None,axis=1)
【解决方案2】:

使用映射和 df.rename() 重命名列:

df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
df.rename(columns={"A": "a", "B": "c"})

print(df):

   a    c
0  1  4
1  2  5
2  3  6

【讨论】:

  • 如何根据行中的值动态地进行映射?因为我不知道确切的地图列={“A”:“a”,“B”:“c”}
【解决方案3】:

因此可以将标记名称保留为行名称;

df2=df.drop(columns=['Marker','B']).set_index('New_Name').T.rename_axis('Marker',axis=1)
df2

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2022-11-29
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    相关资源
    最近更新 更多