【问题标题】:Pandas - All Column to 1 new ColumnPandas - 所有列到 1 个新列
【发布时间】:2021-03-21 16:45:55
【问题描述】:

我的数据框有 6 列日期,我希望它们在 1 列中 DATA FRAME IMAGE HERE

制作另一列的代码如下

df['Mega'] = df['Mega'].append(df['RsWeeks','RsMonths','RsDays','PsWeeks','PsMonths','PsDays'])

我是 python 和 pandas 的新手,我想了解更多信息,所以也请指出我的资源,因为我没有编程背景,调试能力很差。

【问题讨论】:

  • 当你说你想把它们变成一列时,你的意思是你想要每个单元格中的日期列表,还是所有日期的字符串?你想要日期作为日期时间对象还是字符串?
  • 我想要每个单元格中的日期列表,因为稍后我想过滤它们,所以我希望将 6 列中的所有日期放入 1 个大列中以应用过滤器。

标签: python pandas


【解决方案1】:

您可以使用pd.melt() 使您的数据框从宽变长:

df_reshaped = pd.melt(df, id_vars = ['id_1','id_2','id_3'], var_name = 'new_name', value_name = 'Mega')

【讨论】:

  • 不需要在列名后面加.str吗?
  • 我总是使用.astype(str),它可以只使用.str 吗?
  • 好吧,我的所有列都排成一行。但我的目标是将所有这些列转换为独立的行,这样我就会得到大约 24 行。因为我想稍后在那个巨型列上运行过滤器
  • 是的,这就是我认为你需要的。你理想的输出是什么?
  • screencast.com/t/bD0iLMdl 我希望我的列最终看起来像这样,所以我可以在这晚的 254 行列上使用过滤器来过滤结果
【解决方案2】:

数据:

df = pd.DataFrame({"name" : 'Dav Las Oms'.split(),
                  'age' : [25, 50,  70]})
df['Name'] = list(['a', 'M', 'm'])

df:

  name  age Name
0  Dav   25    a
1  Las   50    M
2  Oms   70    m
df = pd.DataFrame(df.astype(str).apply('|'.join, axis=1))

df:

          0
0  Dav|25|a
1  Las|50|M
2  Oms|70|m

【讨论】:

    【解决方案3】:

    Pandas 文档是很好的示例的重要来源。 Click here 访问包含大量示例和视觉效果的页面。

    针对您的特殊情况:

    我们构造一个样本DataFrame

    import pandas as pd
    
    df = pd.DataFrame([
      {"RsWeeks": "2015-11-10", "RsMonths": "2016-08-01"},
      {"RsWeeks": "2015-11-11", "RsMonths": "2015-12-30"}
    ])
    print("DataFrame preview:")
    print(df)
    

    输出:

    DataFrame preview:
          RsWeeks    RsMonths
    0  2015-11-10  2016-08-01
    1  2015-11-11  2015-12-30
    

    我们连接列RsWeeksRsMonths 以创建Series

    my_series = pd.concat([df["RsWeeks"], df["RsMonths"]], ignore_index=True)
    print("\nSeries preview:")
    print(my_series)
    

    输出:

    Series preview:
    0    2015-11-10
    1    2015-11-11
    2    2016-08-01
    3    2015-12-30
    

    编辑

    如果您确实需要将新的Series 作为列添加到您的DataFrame,您可以执行以下操作:

    df2 = pd.DataFrame({"Mega": my_series})
    df = pd.concat([df, df2], axis=1)
    print("\nDataFrame preview:")
    print(df)
    

    输出:

    DataFrame preview:
          RsWeeks    RsMonths        Mega
    0  2015-11-10  2016-08-01  2015-11-10
    1  2015-11-11  2015-12-30  2015-11-11
    2         NaN         NaN  2016-08-01
    3         NaN         NaN  2015-12-30
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-06
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      相关资源
      最近更新 更多