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