簡體   English   中英

如何將 pandas dataframe 中特定行的值更改為 NaN?

[英]How can I change values to NaN in a pandas dataframe for specific rows?

我目前正在計算過去 10 年中大約 19,000 家公司的現金價格比。 我將所有這些都放在一個數據框中,並且有 20 多個變量。 我想解決的問題是在引入新的股票代碼后重新啟動滾動總和。 我在下面編碼的方式導致新股票的前三個條目也將列中它之前的股票的 Q_Cashflow 相加。

我編碼如下:

df['K_Cashflow'] = df.Q_Cashflow.rolling(4).sum()
df['cash-to-price'] = df['K_Cashflow']/df['Market Cap']

output 是:

   Ticker Symbol    |Q_Cashflow |Market Cap |cash-to-price  |K_Cashflow|
44     ADCT.1       |    16.9   |709.0700   |0.120157       |  85.2    |
45     ADCT.1       |   102.2   |718.7700   |0.310948       |  223.5   |
46     ADCT.1       |   136.6   |1231.5240  |0.260815       |  321.2   |
47     AAL          |   456.0   |3034.1766  |0.234561       |  711.7   |
48     AAL          |  1173.0   |2258.1468  |0.827138       | 1867.8   |
49     AAL          |  1090.0   |2088.2862  |1.367437       | 2855.6   |
50     AAL          |  1241.0   |2597.5755  |1.524499       | 3960.0   |

第 47:50 行應該是 K_Cashflow 的 NaN。 對於每個不同的股票代碼,我如何將 K_Cashflow 的前三個條目更改為 Nan?

實現此目的的一種方法是根據股票代碼創建排名列,然后將最低的三個排名分配給 nan。 這是一個例子:

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'ticker': ['a'] * 7 + ['b'] * 10,
    'cash_flow': range(17),
})

# Create the rank
df['rank'] = df.groupby('ticker').rank()

# Set the first 3 instances of each ticker to nan
df.loc[df['rank'] < 4, ['cash_flow']] = np.nan

df 
   ticker  cash_flow  rank
0       a        NaN   1.0
1       a        NaN   2.0
2       a        NaN   3.0
3       a        3.0   4.0
4       a        4.0   5.0
5       a        5.0   6.0
6       a        6.0   7.0
7       b        NaN   1.0
8       b        NaN   2.0
9       b        NaN   3.0
10      b       10.0   4.0
11      b       11.0   5.0
12      b       12.0   6.0
13      b       13.0   7.0
14      b       14.0   8.0
15      b       15.0   9.0
16      b       16.0  10.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM