在pandas中,如何添加一个基于给定分组枚举行的新列?
例如,假设以下DataFrame:
import pandas as pd
import numpy as np
a_list = ['A', 'B', 'C', 'A', 'A', 'C', 'B', 'B', 'A', 'C']
df = pd.DataFrame({'col_a': a_list, 'col_b': range(10)})
df
col_a col_b
0 A 0
1 B 1
2 C 2
3 A 3
4 A 4
5 C 5
6 B 6
7 B 7
8 A 8
9 C 9
Run Code Online (Sandbox Code Playgroud)
我想添加一个col_c根据分组col_a和排序给我的"组"的第N行col_b.
期望的输出:
col_a col_b col_c
0 A 0 1
3 A 3 2 …Run Code Online (Sandbox Code Playgroud) 当试图使用Airflow的模板功能(通过Jinja2)和PostgresOperator时,我一直无法渲染.我很可能做错了什么,但我很遗憾这个问题可能是什么.这是一个重现我一直得到的TemplateNotFound错误的例子:
airflow.cfg
airflow_home = /home/gregreda/airflow
dags_folder = /home/gregreda/airflow/dags
Run Code Online (Sandbox Code Playgroud)
相关的DAG和变量
default_args = {
'owner': 'gregreda',
'start_date': datetime(2016, 6, 1),
'schedule_interval': None,
'depends_on_past': False,
'retries': 3,
'retry_delay': timedelta(minutes=5)
}
this_dag_path = '/home/gregreda/airflow/dags/example_csv_to_redshift'
dag = DAG(
dag_id='example_csv_to_redshift',
schedule_interval=None,
default_args=default_args
)
Run Code Online (Sandbox Code Playgroud)
/example_csv_to_redshift/csv_to_redshift.py
copy_s3_to_redshift = PostgresOperator(
task_id='load_table',
sql=this_dag_path + '/copy_to_redshift.sql',
params=dict(
AWS_ACCESS_KEY_ID=Variable.get('AWS_ACCESS_KEY_ID'),
AWS_SECRET_ACCESS_KEY=Variable.get('AWS_SECRET_ACCESS_KEY')
),
postgres_conn_id='postgres_redshift',
autocommit=False,
dag=dag
)
Run Code Online (Sandbox Code Playgroud)
/example_csv_to_redshift/copy_to_redshift.sql
COPY public.table_foobar FROM 's3://mybucket/test-data/import/foobar.csv'
CREDENTIALS 'aws_access_key_id={{ AWS_ACCESS_KEY_ID }};aws_secret_access_key={{ AWS_SECRET_ACCESS_KEY }}'
CSV
NULL as 'null'
IGNOREHEADER as 1;
Run Code Online (Sandbox Code Playgroud)
调用airflow render example_csv_to_redshift load_table 2016-06-14抛出以下异常.注意我也遇到了另一个DAG的问题,这就是你看到example_redshift_query_to_csv提到的路径的原因. …