python中pandas如何根据上一行的值条件增加新列?

values = [[5.5, 2.5, 10.0], [2.0, 4.5, 1.0], [2.5, 5.2, 8.0],[4.5, 5.8, 4.8], [4.6, 6.3, 9.6],[4.1, 6.4, 9.0],[5.1, 2.3, 11.1]]
creating a pandas dataframe
df = pd.DataFrame(values, columns=['col1', 'col2', 'col3'],index=['a', 'b', 'c', 'd', 'e', 'f', 'g'])
输出
col1  col2  col3
a   5.5   2.5  10.0
b   2.0   4.5   1.0
c   2.5   5.2   8.0
d   4.5   5.8   4.8
e   4.6   6.3   9.6
f   4.1   6.4   9.0
g   5.1   2.3  11.1
我需要根据col1列 中的值 条件:大于3 小于5 则
df['col4'] = 1 else df['col4'] = 0
我用 df['col4'] = df.apply(lambda x: 1 if 3 < x['col1'] < 5 else 0, axis=1)输出的结果为
col1  col2  col3        col4
a   5.5   2.5  10.0           0 
b   2.0   4.5   1.0           0
c   2.5   5.2   8.0           0
d   4.5   5.8   4.8           1
e   4.6   6.3   9.6           1
f   4.1   6.4   9.0           1
g   5.1   2.3  11.1           0
然后我最终需要的就是 把 等于1的累加
col1  col2  col3             col4
a   5.5   2.5  10.0           0 
b   2.0   4.5   1.0           0
c   2.5   5.2   8.0           0
d   4.5   5.8   4.8           1
e   4.6   6.3   9.6           2
f   4.1   6.4   9.0           3
g   5.1   2.3  11.1           0
请问 这样的情况下 怎么写代码呢?
回答:
最终更新
换个思路,用更加简洁高效的方式解决问题。
python">df['col4'] = pd.Series(np.where((df['col1'] > 3) & (df['col1'] < 5), 1, np.nan), index=df.index).cumsum().fillna(0)更新
更新了简洁些的方法。
values = [[5.5, 2.5, 10.0], [2.0, 4.5, 1.0], [2.5, 5.2, 8.0], [4.5, 5.8, 4.8], [4.6, 6.3, 9.6], [4.1, 6.4, 9.0],          [5.1, 2.3, 11.1], [4.5, 5.8, 4.8], [4.5, 5.8, 4.8], [4.5, 5.8, 4.8], [4.5, 5.8, 4.8], [2, 5.8, 4.8]]
df = pd.DataFrame(values, columns=['col1', 'col2', 'col3'], index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'])
v = df.apply(lambda x: 1 if 3 < x['col1'] < 5 else np.nan, axis=1)
cumsum = v.cumsum().fillna(method='pad')
reset = -cumsum[v.isnull()].diff().fillna(cumsum)
df['col4'] = v.where(v.notnull(), reset).cumsum().fillna(0)
print(df)
原答案
values = [[5.5, 2.5, 10.0], [2.0, 4.5, 1.0], [2.5, 5.2, 8.0], [4.5, 5.8, 4.8], [4.6, 6.3, 9.6], [4.1, 6.4, 9.0],          [5.1, 2.3, 11.1], [4.8, 2.3, 4.8], [4.8, 2.3, 4.8]]
df = pd.DataFrame(values, columns=['col1', 'col2', 'col3'], index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'y'])
col4 = []
index = 1
for one in df['col1']:
    if 3 < one < 5:
        col4.append(index)
        index += 1
    else:
        index = 1
        col4.append(0)
df['col4'] = col4
print(df)
or
values = [[5.5, 2.5, 10.0], [2.0, 4.5, 1.0], [2.5, 5.2, 8.0], [4.5, 5.8, 4.8], [4.6, 6.3, 9.6], [4.1, 6.4, 9.0],          [5.1, 2.3, 11.1], [4.8, 2.3, 4.8], [4.8, 2.3, 4.8]]
df = pd.DataFrame(values, columns=['col1', 'col2', 'col3'], index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'y'])
def add(index):
    index[0] = index[0] + 1
    return index[0]
def reset(index):
    index[0] = 0
    return 0
index = [0]
df['col4'] = df.apply(lambda x: add(index) if 3 < x['col1'] < 5 else reset(index), axis=1)
print(df)
以上是 python中pandas如何根据上一行的值条件增加新列? 的全部内容, 来源链接: utcz.com/p/938763.html





