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

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

回到顶部