第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何迭代 Pandas 數(shù)據(jù)框中的多列?

如何迭代 Pandas 數(shù)據(jù)框中的多列?

暮色呼如 2023-10-11 16:16:47
我有以下數(shù)據(jù)幀,其中一列表示對話中每一秒說話者的 ID (0,1),另一列表示該對話中經(jīng)過的秒數(shù)。myDF = pd.DataFrame({'ID': [0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1], 'seconds': (np.arange(16))})-------------------------------   ID               Seconds-------------------------------   0                   0   0                   1   0                   2   0                   3   1                   4   1                   5   1                   6   1                   7   0                   8   0                   9   0                   10   0                   11   1                   12   1                   13   1                   14   1                   15-------------------------------我只對說話者 ID 1 感興趣,希望可以清楚地看出說話者 1 語音的邊界在第 4-7 秒和第 12-15 秒之間。我想要生成的是一個單獨(dú)的數(shù)據(jù)幀,其中包含每個說話者 1 個語音段的開始和結(jié)束,其中每一行都是一個不間斷的語音周期。像這樣的東西:--------------------------------  start              end       --------------------------------    4                 7            12                15--------------------------------我有一些不起作用的偽代碼,希望概述我想要實(shí)現(xiàn)的目標(biāo),但到目前為止我還找不到正確的解決方案。本質(zhì)上,對于每一行,我將 ID 值與前一行進(jìn)行比較(因?yàn)?ID 的更改表示語音的開始),并將相應(yīng)的秒值添加到 bdry 數(shù)據(jù)幀中。同樣,我隨后將每個 ID 值與下一行進(jìn)行比較(因?yàn)檫@將表示語音結(jié)束)。bdry = pd.DataFrame(columns=['start','end'])for i in myDF:    if i['ID'] == 1:        if i.ID != i['ID'].shift(): # compare ID with previous            bdry['start'].append(i['seconds'])        if i.ID != i['ID'].shift(-1): # compare ID with next            bdry['end'].append(i['seconds'])
查看完整描述

2 回答

?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個贊

使用以下代碼:


result = myDF.groupby((myDF.ID != myDF.ID.shift()).cumsum()).agg(

    ID=('ID', 'first'), start=('seconds', 'first'), end=('seconds', 'last'))\

    .query('ID == 1').drop(columns='ID').reset_index(drop=True)

對于您的數(shù)據(jù)樣本,結(jié)果是:


   start  end

0      4    7

1     12   15


查看完整回答
反對 回復(fù) 2023-10-11
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個贊

import pandas as pd

from itertools import groupby



myDF = pd.DataFrame({'ID': [0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1], 'seconds': (np.arange(16))})


tmp, m = [], myDF['ID'] == 1

for v, g in groupby(zip(m.index, m), lambda k: k[1]):

    if v:

        g = list(g)

        tmp.append((g[0][0], g[-1][0]))


df = pd.DataFrame(tmp, columns=['start', 'end'])

print(df)

印刷:


   start  end

0      4    7

1     12   15


查看完整回答
反對 回復(fù) 2023-10-11
  • 2 回答
  • 0 關(guān)注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號