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

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

根據(jù) pandas 中的條件由公司創(chuàng)建一個虛擬對象

根據(jù) pandas 中的條件由公司創(chuàng)建一個虛擬對象

犯罪嫌疑人X 2023-09-12 15:35:57
我有一個 pandas 數(shù)據(jù)框,如下所示:data = {"firm": [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4], "year" : [2000, 2001, 2002, 2003, 1990, 1991, 1992, 1993, 1994, 2010, 2011, 2012, 2005, 2006, 2007, 2008, 2009, 2010], "var" : [3, 2, 1, 0.5, 5, 3, 2, 0.5, 0.5, 0.5, 0, 0, 8, 5, 3, 0.5, 0.5, 0.5]} df = pd.DataFrame(data) df我想為每個公司創(chuàng)建一個虛擬變量,條件如下:只要變量“var”連續(xù)兩年等于或小于 0.5,“dummy”就等于 1,因此變量“dummy”如下所示:data = {"firm": [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4], "year" : [2000, 2001, 2002, 2003, 1990, 1991, 1992, 1993, 1994, 2010, 2011, 2012, 2005, 2006, 2007, 2008, 2009, 2010], "var" : [3, 2, 1, 0.5, 5, 3, 2, 0.5, 0.5, 0.5, 0, 0, 8, 5, 3, 0.5, 0.5, 0.5], "dummy" : [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1]} df = pd.DataFrame(data) df最好的方法是什么?
查看完整描述

3 回答

?
墨色風(fēng)雨

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

您可以只移動,檢查閾值并與原始系列的檢查結(jié)合起來:


df.groupby('firm')['var'].shift().le(.5) & df['var'].le(.5)

這應(yīng)該比 稍快一些groupby().apply。


另一種方法(在您需要檢查幾年的情況下更好)是rolling:


df['dummy'] = df.groupby('firm')['var'].transform(lambda x: x.rolling(2).max().le(.5))

輸出:


0     False

1     False

2     False

3     False

4     False

5     False

6     False

7     False

8      True

9     False

10     True

11     True

12    False

13    False

14    False

15    False

16     True

17     True

Name: var, dtype: bool


查看完整回答
反對 回復(fù) 2023-09-12
?
慕田峪7331174

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

您的需求幾乎可以直接轉(zhuǎn)換為 pandas。

首先groupby堅(jiān)定,然后檢查您的條件是否滿足apply。

你可以得到下一年shift


import pandas as pd


data = {"firm": [1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4], "year" : [2000, 2001, 2002, 2003, 1990, 1991, 1992, 1993, 1994, 2010, 2011, 2012, 2005, 2006, 2007, 2008, 2009, 2010], "var" : [3, 2, 1, 0.5, 5, 3, 2, 0.5, 0.5, 0.5, 0, 0, 8, 5, 3, 0.5, 0.5, 0.5]} 

df = pd.DataFrame(data)


# Solution

df['dummy'] = df.groupby('firm')['var'].apply(lambda x: (x.shift() <= .5) & (x <= .5)).view('i1')

print(df)

出去:


    firm  year  var  dummy

0      1  2000  3.0      0

1      1  2001  2.0      0

2      1  2002  1.0      0

3      1  2003  0.5      0

4      2  1990  5.0      0

5      2  1991  3.0      0

6      2  1992  2.0      0

7      2  1993  0.5      0

8      2  1994  0.5      1

9      3  2010  0.5      0

10     3  2011  0.0      1

11     3  2012  0.0      1

12     4  2005  8.0      0

13     4  2006  5.0      0

14     4  2007  3.0      0

15     4  2008  0.5      0

16     4  2009  0.5      1

17     4  2010  0.5      1


查看完整回答
反對 回復(fù) 2023-09-12
?
炎炎設(shè)計(jì)

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

讓我們嘗試groupby一下shift


df.groupby('firm')['var'].apply(lambda x : x.shift().le(0.5) & x.le(0.5))

0     False

1     False

2     False

3     False

4     False

5     False

6     False

7     False

8      True

9     False

10     True

11     True

12    False

13    False

14    False

15    False

16     True

17     True

Name: var, dtype: bool


查看完整回答
反對 回復(fù) 2023-09-12
  • 3 回答
  • 0 關(guān)注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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