簡體   English   中英

新列從另一個數據框的 max(value) 增量添加一個

[英]New Column incrementally adds one from max(value) of another dataframe

如何添加使用max(df2.days) + 1 (1175) 的列df1.days並為所有剩余行遞增添加一個?

我不能為此使用 cumsum。

df1 = pd.DataFrame({
        'date': ['2001-01-01','2001-01-02','2001-01-03', '2001-01-04', '2001-01-05'],
        'prod': [800, 900, 1200, 700, 600]})

df2 = pd.DataFrame({'days': [99,1,188,1173,1174]})

所需的數據框:

print(d1)

         date  prod days
0  2001-01-01   800 1175
1  2001-01-02   900 1176
2  2001-01-03  1200 1177
3  2001-01-04   700 1778
4  2001-01-05   600 1779

1. pandas方法

使用fillnacumsum

df1.loc[0, 'days'] = df2['days'].max()
df1['days'] = df1['days'].fillna(1).cumsum()

         date  prod    days
0  2001-01-01   800  1175.0
1  2001-01-02   900  1176.0
2  2001-01-03  1200  1177.0
3  2001-01-04   700  1178.0
4  2001-01-05   600  1179.0

2. numpy方法

df1['days'] = np.cumsum(np.append([df2['days'].max()], np.ones(len(df1)-1)))

         date  prod    days
0  2001-01-01   800  1175.0
1  2001-01-02   900  1176.0
2  2001-01-03  1200  1177.0
3  2001-01-04   700  1178.0
4  2001-01-05   600  1179.0

3. 沒有cumsumfor loop

(不是最好的)

values = []
value = df2['days'].max()
for x in range(len(df1)):
    values.append(value)
    value += 1

df1['days'] = values

         date  prod  days
0  2001-01-01   800  1175
1  2001-01-02   900  1176
2  2001-01-03  1200  1177
3  2001-01-04   700  1178
4  2001-01-05   600  1179

您可以插入一個范圍為 =(df2 days max+1 to df2 days max+number of rows) 的列。 第一個參數len(df1.columns)是在最后添加這一列,不影響邏輯

df1.insert(len(df1.columns),'days',range(df2.days.max()+1, df2.days.max()+1+len(df1)))

date    prod    days
0   2001-01-01  800 1175
1   2001-01-02  900 1176
2   2001-01-03  1200    1177
3   2001-01-04  700 1178
4   2001-01-05  600 1179

暫無
暫無

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

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