[英]Python Pandas dataframe - add a new column based on index value
[英]Pandas Add value to Dataframe column based on index and if value exists then append
我根据索引值将值分配给列,如果值存在,则将新值附加到旧值
我尝试根据索引将值应用于列,但无法将值追加到列中已存在的值
数据帧: -
foo bar
0 1 1
1 2 2
2 3 3
3 3 3
代码:-
values = ['a', 'b']
for val in values:
df.loc[df['foo'] == 1, foo2] = val
Outupt数据框:
foo bar foo2
0 1 1 b
1 2 2
2 3 3
3 3 3
预期的DataFrame:
foo bar foo2
0 1 1 a,b
1 2 2
2 3 3
3 3 3
正如您所注意到的
df.loc[df['foo'] == 1, foo2] = b
覆盖先前的值,以便最终只包含b
。 您是否需要通过这种特定方式解决问题? 您可以编写一个自定义函数,并使用apply附加值,但这不是应该使用pandas的方式。 我建议创建另一个列'foo3'
。 之后,您始终可以加入字母。
这应该可以实现您想要的。 但是,正如maow已经指出的那样,您应该考虑添加新列,并在需要时将它们串联起来。
import pandas as pd
df = pd.DataFrame({'foo': [1,2,3,3], 'bar': [1,2,3,3], 'foo2':[None, None, None, None]})
print(df)
a = 'a'
b = 'b'
# insert a
df.loc[df['foo'] == 1, 'foo2'] = a
print(df)
# concat b to a
df.loc[df['foo'] == 1, 'foo2'] += ',' + b
print(df)
这应该可以解决您的问题
import pandas as pd
df = pd.DataFrame({'foo': [1,2,3,3], 'bar': [1,2,3,3], 'foo2':[None, None, None, None]})
print(df)
print(df)
values = ['a', 'b']
for val in values:
print(df.loc[df['foo'] == 1,'foo2'][0])
if (df.loc[df['foo'] == 1,'foo2'][0]==None):
df.loc[df['foo'] == 1, 'foo2']=val
else:
df.loc[df['foo'] == 1, 'foo2']=df.loc[df['foo'] == 1:,'foo2'] + ',' +val
print(df)
输出:
foo bar foo2
0 1 1 a,b
1 2 2
2 3 3
3 3 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.