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

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

Pandas - 按日期計(jì)算不同的值 - 更有效的方法?

Pandas - 按日期計(jì)算不同的值 - 更有效的方法?

慕村9548890 2024-01-16 15:48:03
新人來了...我有一個(gè)名為“yes_no”的數(shù)據(jù)框,其結(jié)構(gòu)如下(但它有大約 50K 條目):      Date        Yes/No0     2020-10-27     No1     2020-10-27     No2     2020-10-26    Yes3     2020-10-26    Yes4     2020-10-26    No5     2020-10-25    No6     2020-10-25    Yes7     2020-10-25    No8     2020-10-24    Yes9     2020-10-24    Yes我需要計(jì)算每個(gè)日期的“是”數(shù)量和“否”數(shù)量,并計(jì)算比率,最終得到如下結(jié)果:     Date        Yes   No  Percentage0   2020-10-27  1142  120    0.9049131   2020-10-26  4112  388    0.9137782   2020-10-25  1055   68    0.9394483   2020-10-24  1012   86    0.9216764   2020-10-23  1476  163    0.9005495   2020-10-22  1633  182    0.8997256   2020-10-21  1773  237    0.8820907   2020-10-20  2332  246    0.9045778   2020-10-19  2868  326    0.8979349   2020-10-18   892  107    0.89289310  2020-10-17   992  110    0.90018111  2020-10-16  2106  207    0.91050612  2020-10-15  5628  632    0.89904213  2020-10-14  9304  937    0.90850514  2020-10-13  8129  881    0.902220我通過查閱字典,使用以下代碼使其工作,但它非常長:by_date = {}for date in yes_no['Date']:  by_date[date] = yes_no.loc[yes_no['Date'] == date]for date in by_date:  by_date[date] =  by_date[date]['Yes/No'].value_counts()for date in by_date:  if 'No' not in by_date[date]:    by_date[date]['No'] = 0for date in by_date:  if 'Yes' not in by_date[date]:    by_date[date]['Yes'] = 0for date in by_date:  by_date[date] = [by_date[date]['Yes'], by_date[date]['No'], (by_date[date]['Yes']/(by_date[date]['Yes'] + by_date[date]['No']))]df_yes = pd.DataFrame(list(by_date.values()),columns = ['Yes', 'No', 'Percentage'])df_yes['Date'] = list(by_date.keys())df_yes = df_yes[['Date', 'Yes', 'No', 'Percentage']]對(duì)于較小的數(shù)據(jù)幀(1-2K)它工作得很好,但是這段代碼需要永遠(yuǎn)完成 50K 條目:for date in yes_no['Date']:  by_date[date] = yes_no.loc[yes_no['Date'] == date]一定有更好的方法來做到這一點(diǎn)!
查看完整描述

4 回答

?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

您可以使用矢量化操作更有效地完成此操作(無需顯式 python 循環(huán))。這意味著我們所有的操作都由底層 C/C++ 函數(shù)執(zhí)行,以實(shí)現(xiàn)巨大的加速。


out = (df.groupby("Date")["Yes/No"]

       .value_counts()

       .unstack(fill_value=0)

       .rename_axis(columns=None)

       .eval("percentage = Yes / (Yes + No)")

      )


print(out)

            No  Yes  percentage

Date                           

2020-10-24   0    2    1.000000

2020-10-25   2    1    0.333333

2020-10-26   1    2    0.666667

2020-10-27   2    0    0.000000

腳步:

df.groupby("Date")["Yes/No"]:按“日期”對(duì)數(shù)據(jù)框進(jìn)行分組,然后從這些分組中選擇“是/否”列

.value_counts():獲取此列中每個(gè)分組的每個(gè)“是”和“否”的計(jì)數(shù)。

.unstack(fill_value=0):現(xiàn)在我們有了計(jì)數(shù),我們將“是”和“否”放入各自的列中。

.rename_axis(columns=None):我們有一個(gè)看起來很有趣的列索引名稱,我個(gè)人不喜歡這些,所以我要?jiǎng)h除它。

.eval("percentage = Yes / (Yes + No)"):創(chuàng)建一個(gè)名為百分比的新列,并將所有“是”計(jì)數(shù)除以總響應(yīng)計(jì)數(shù)(“是”+“否”)的值分配給它


查看完整回答
反對(duì) 回復(fù) 2024-01-16
?
慕娘9325324

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

# groupby date and yes/no columns and get the size

# then pivot 

new_df = df.groupby(['Date', 'Yes/No'], as_index=False).size().pivot('Date', 'Yes/No', 'size').replace(np.nan, 0)

# divide the yes column by the size of each group

new_df['percent_yes'] = new_df['Yes'] / new_df.sum(1)

print(new_df)


Yes/No       No  Yes  percent_yes

Date                             

2020-10-24  0.0  2.0     1.000000

2020-10-25  2.0  1.0     0.333333

2020-10-26  1.0  2.0     0.666667

2020-10-27  2.0  0.0     0.000000


查看完整回答
反對(duì) 回復(fù) 2024-01-16
?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

您應(yīng)該研究一下 one-hot 編碼。熊貓用途pd.get_dummies

我的解決方案是:

df_new?=?pd.get_dummies(yes_no,?columns=["Yes/No"]).groupby("Date").sum().rename(columns={"Yes/No_No":"No",?"Yes/No_Yes":"Yes"}

然后你就可以輕松計(jì)算百分比。


查看完整回答
反對(duì) 回復(fù) 2024-01-16
?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊

有一個(gè)非常簡單的方法可以做到這一點(diǎn),也許還有一些更優(yōu)雅的方法:


import pandas as pd


df = pd.DataFrame({'Yes_no': ['yes','no','yes', 'yes', 'no','yes','no','yes', 'yes', 'no','yes','no','yes', 'yes', 'no','yes','no','yes', 'yes', 'no'],

    'Dates': ['2019-07-01','2019-07-01','2019-07-01', '2019-07-03', '2019-07-03','2019-07-03','2019-07-07','2019-07-07', '2019-07-07', '2019-07-07','2019-07-07','2019-07-07','2019-07-07', '2019-07-07', '2019-07-07','2019-07-07','2019-07-07','2019-07-07', '2019-07-07', '2019-07-07']})

dff = df.groupby(['Yes_no','Dates'])['Yes_no'].count()

dff.unstack().T

要?jiǎng)?chuàng)建具有比例的額外列,只需定義一個(gè)新列


dff['prop']=dff['no']/dff['yes']


查看完整回答
反對(duì) 回復(fù) 2024-01-16
  • 4 回答
  • 0 關(guān)注
  • 269 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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