在单独的列中找到字符串时,将数据框中的列设置为值

时间:2017-09-29 14:09:36

标签: python pandas dataframe

我在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"

数据在第一列中不会保持不变,因此索引不起作用。我尝试了很多东西,似乎无法找到解决方案。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

请注意replacemap

之间的区别

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'})