我在python中使用pandas模块。我的表x包含列a,b,c,类似如下:
a b c
z 4 ''
s 5 ''
u 4 ''
y 3 ''
我需要遍历列a
并搜索"z"
。找到"z"
后,我需要将c
设置为"123"
,直到"y"
列中找到a
,然后才需要设置c
到"321"
。
数据在第一列中不会保持不变,因此索引不起作用。我尝试了很多东西,似乎无法找到解决方案。有什么建议吗?
答案 0 :(得分:3)
请注意replace
和map
:
map
将不会返回NaN
的匹配项。稍后ffill
将填充上一行数据中的NaN
。
df.assign(c=df.a.map({'z':'123','y':'321'}).ffill())
a b c
0 z 4 123
1 s 5 123
2 u 4 123
3 y 3 321
答案 1 :(得分:2)
基于Numpy where
的方法
df['n'] = np.where((df['a'].isin(['z','y']),df['a'],np.nan)
df['n'] = df['n'].ffill()
df['c'] = np.where(df['n'] == 'z' , 123,321)
df.drop('n',1,inplace=True)
输出:
a b c 0 z 4 123 1 s 5 123 2 u 4 123 3 y 3 321
答案 2 :(得分:2)
用NaN代替所有非y或z值:
df['c'] = df['a'].where(df['a'].isin(['y', 'z']))
转发填充:
df['c'] = df['c'].ffill()
替换:
df['c'] = df['c'].map({'y': '321', 'z': '123'})