python - 使用两列的第一个和最后一个值并根据条件生成新的数据框

标签 python pandas numpy

假设我有以下数据框,

df.head()
    ID  start    end    symbol    symbol_id    type
    1   146       291      bus    bus-201  CDS
    1   146      314      bus    bus-201  trans
    1   603       243      bus    bus-201  CDS
    1   1058      2123      car    car-203  CDS
    1   910       81      car    car-203  ex
    1   2623      2686      car    car-203  CDS
    1   5948       6043      car    car-203  CDS
    1   6348       6474      car    car-203  CDS
    1   910       81      car    car-201  ex
    1   910       81      car    car-201  ex
    1   636      650      car    car-203  CDS
    1   202      790      train    train-204  CDS
    1   200      314      train    train-204  CDS
    1   202      837      train    train-204  CDS

现在从上面的数据框中,如果 type 列是 CDS,我需要根据 symbol_id 列对项目进行分组。然后,我需要使用 start 列中的第一个值作为新数据框 start 列中的值,并使用 columnend 中的最后一个值作为值在 columnend` 中。

最后,df2 应该是这样的,

start    end    symbol    symbol_id    type
146     243    bus        bus-203     CDS
1058    650    car        car-203     CDS
202     837    train      train-204    CDS

我尝试使用 df['symbol'] 中的 list 值,

sym_list=df['symbol'].tolist().drop_duplicates()
    for symbol in df['symbol'].values:
        if symbol in tuple(sym_list):
           df_symbol =df['symbol'].isin(symbol)

抛出以下错误,

TypeError: only list-like objects are allowed to be passed to isin(), you passed a [str]

我试图为每个 symbolsymbol_id 值捕获第一个和最后一个值,

start = df.query('type =="CDS"')[['start']].iloc[0]    
end = df.query('type =="CDS"')[['end']].iloc[-1]  

但是,我的数据框很大,symbol 有超过 50,000 个唯一值,因此我需要一个更好的解决方案。

感谢任何帮助或建议!!

最佳答案

您可以使用 group by 以及 first 和 last 聚合函数来实现

df[df["type"]=="CDS"].groupby("symbol_id").agg({"start":"first", "end":"last", "symbol":"first","symbol_id":"first", "type":"first"})

关于python - 使用两列的第一个和最后一个值并根据条件生成新的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58182266/

相关文章:

python - pickle 数据框

python - 自定义排序 pandas 数据框

arrays - 使用 np.savetxt 保存包含字符串和 float 的结构化 numpy 数组

python - 发送缓冲区的长度并使用 C 从 python 接收它

python - 无法分配 "<class ' django.contrib.auth.models.User' >": "Model.user"必须是 "User"实例

python - 在 Python 中插入主目录的问题

python - pandas.read_excel 的类型错误

numpy - Scipy、Numpy : Audio classifier, 语音/语音事件检测

python - 我想从数组中选择特定范围的索引

python - ImportError : Could not import settings (Is it on > sys. 路径?设置文件中是否存在导入错误?)在 AWS Elastic Beanstalk 上