【问题标题】:How can i merge two columns into one (final output) (python/sqlite)如何将两列合并为一列(最终输出)(python/sqlite)
【发布时间】:2018-06-09 10:51:29
【问题描述】:

如何将两列合并为一列(最终输出)(python/sqlite)

import sqlite3
import pandas as pd

# load data
df = pd.read_csv('CurriculumAuditReport.csv')

# strip whitespace from headers
df.columns = df.columns.str.strip()

con = sqlite3.connect("sans.db")

# drop data into database
df.to_sql("MyTable", con, if_exists='replace')

qry = """
SELECT department, count(*) as cnt
FROM MyTable
WHERE CompletedTraining = 'Incomplete'
GROUP BY department
"""

qry2 = """
SELECT [Employee Name], Department, [Date Assigned] FROM MyTable Where CompletedTraining ='Incomplete' ORDER BY Department ASC
"""


df = pd.read_sql_query(qry, con)
df2 = pd.read_sql_query(qry2, con)

print(df.to_json())
print(df2)


con.close()

我可以将部门与cnt合并吗?所以我有 AQPSD:6,ASD:8,CO:2 等???

目前:2 列符合预期

   Department  count(*)

0       AQPSD         6
1         ASD         8
2          CO         2
3       ECARS         3
4          ED         6
5          EO         4
6         ISD         4
7        MSCD         5
8         OIS         1
9          RD         2
10        TTD         4

这有以下输出:1 列(有点难以显示,但这是我的最终目标)

Department

0       AQPSD 6
1         ASD 8
2          CO 2
3       ECARS 3
4          ED 6
5          EO 4
6         ISD 4
7        MSCD 5
8         OIS 1
9          RD 2
10        TTD 4

【问题讨论】:

  • 我理解正确吗 - 您想要一个 single 列,其中包含 AQPSD: 6ASD: 8 等值?你能发布你想要的输出吗?
  • df.set_index('Department').to_dict() 怎么样?
  • @MaxU 我已经更新了帖子以反映我希望输出的内容
  • @tarashypka 和 chart.js 的格式一样吗?

标签: python sql sqlite pandas


【解决方案1】:

您可以在 SQLite 端或 Pandas 中执行此操作。

选项 1(使用 SQLite):

qry = """
SELECT department || ' ' || cast(count(*) as text) as col_name
FROM MyTable
WHERE CompletedTraining = 'Incomplete'
GROUP BY department
"""
df = pd.read_sql(qry, con)

选项 2(使用 Pandas):

假设我们有以下 DataFrame:

In [79]: df
Out[79]:
   department  cnt
0       AQPSD    6
1         ASD    8
2          CO    2
3       ECARS    3
4          ED    6
5          EO    4
6         ISD    4
7        MSCD    5
8         OIS    1
9          RD    2
10        TTD    4

让我们将其转换为单列 DF:

In [80]: df['department'] = df['department'] + ' ' + df.pop('cnt').astype(str)

In [81]: df
Out[81]:
   department
0     AQPSD 6
1       ASD 8
2        CO 2
3     ECARS 3
4        ED 6
5        EO 4
6       ISD 4
7      MSCD 5
8       OIS 1
9        RD 2
10      TTD 4

PS 这完全可以在不使用 SQLite 的情况下轻松完成,但我们需要一个原始格式的小型可重现样本数据集(它将重现来自 CurriculumAuditReport.csv 的数据)

【讨论】:

    【解决方案2】:

    这是一步一步的解决方案:

    添加一个新列并将计数列转换为带有“astype(str)”的字符串

    df['new_column'] = df['Department'] + " " + df['count'].astype(str)
    

    删除不需要的列

    del df['Department']
    del df['count']
    

    重命名新列

    df.rename(columns={'new_column': 'Department'}, inplace=True)
    

    我知道它有很多步骤,但有时最好将其分解为小步骤以便更好地理解。

    【讨论】:

      猜你喜欢
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      相关资源
      最近更新 更多