<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def dqdv_cycles(cycles, **kwargs):
 """Convenience functions for creating dq-dv data from given capacity and voltage cycles. Returns a DataFrame with a 'voltage' and a 'incremental_capacity' column. Args: cycles (pandas.DataFrame):
 the cycle data ('cycle', 'voltage', 'capacity', 'direction' (1 or -1)). Returns: pandas.DataFrame with columns 'cycle', 'voltage', 'dq'. Example: """


    # TODO: should add option for normalising based on first cycle capacity
    # this is e.g. done by first finding the first cycle capacity (nom_cap)
    # (or use nominal capacity given as input) and then propagating this to
    # Converter using the key-word arguments
    #   normalize=True, normalization_factor=1.0, normalization_roof=nom_cap

    ica_dfs = list()
    cycle_group = cycles.groupby("cycle")
    for cycle_number, cycle in cycle_group:

        v, dq = dqdv_cycle(cycle, splitter=True, **kwargs)
        _ica_df = pd.DataFrame(
            {
                "voltage": v,
                "dq": dq,
            }
        )
        _ica_df["cycle"] = cycle_number
        _ica_df = _ica_df[['cycle', 'voltage', 'dq']]
        ica_dfs.append(_ica_df)

    ica_df = pd.concat(ica_dfs)
    return ica_df