比较和替换列项 pandas 数据框
Comparing and replacing column items pandas dataframe
我在熊猫数据框中有三列 C1、C2、C3。我的目标是在 C3_i=C1_j 时将 C1_i 替换为 C2_j。这些都是字符串。我在哪里尝试但失败了。避免循环的好方法是什么?
如果我的数据框是
df=pd.DataFrame({'c1': ['a', 'b', 'c'], 'c2': ['d','e','f'], 'c3': ['c', 'z', 'b']})
那我要把c3换成['f','z','e']
我试过了,这需要很长时间。
for i in range(0,len(df)):
for j in range(0,len(df)):
if (df.iloc[i]['c1']==df.iloc[j]['c3']):
df.iloc[j]['c3']=accounts.iloc[i]['c2']
示例数据:
dataframe = pd.DataFrame({'a':['10','4','3','40','5'], 'b':['5','4','3','2','1'], 'c':['s','d','f','g','h']})
输出:
a b c
0 10 5 s
1 4 4 d
2 3 3 f
3 40 2 g
4 5 1 h
代码:
def replace(df):
if len(dataframe[dataframe.b==df.a]) != 0:
df['a'] = dataframe[dataframe.b==df.a].c.values[0]
return df
dataframe = dataframe.apply(replace, 1)
输出:
a b c
0 1 5 0
1 2 4 0
2 0 3 0
3 4 2 0
4 5 1 0
是你想要的吗?
使用map
by Series
created by set_index
:
df['c3'] = df['c3'].map(df.set_index('c1')['c2']).fillna(df['c3'])
update
的替代解决方案:
df['c3'].update(df['c3'].map(df.set_index('c1')['c2']))
print (df)
c1 c2 c3
0 a d f
1 b e z
2 c f e
我在熊猫数据框中有三列 C1、C2、C3。我的目标是在 C3_i=C1_j 时将 C1_i 替换为 C2_j。这些都是字符串。我在哪里尝试但失败了。避免循环的好方法是什么?
如果我的数据框是
df=pd.DataFrame({'c1': ['a', 'b', 'c'], 'c2': ['d','e','f'], 'c3': ['c', 'z', 'b']})
那我要把c3换成['f','z','e']
我试过了,这需要很长时间。
for i in range(0,len(df)):
for j in range(0,len(df)):
if (df.iloc[i]['c1']==df.iloc[j]['c3']):
df.iloc[j]['c3']=accounts.iloc[i]['c2']
示例数据:
dataframe = pd.DataFrame({'a':['10','4','3','40','5'], 'b':['5','4','3','2','1'], 'c':['s','d','f','g','h']})
输出:
a b c
0 10 5 s
1 4 4 d
2 3 3 f
3 40 2 g
4 5 1 h
代码:
def replace(df):
if len(dataframe[dataframe.b==df.a]) != 0:
df['a'] = dataframe[dataframe.b==df.a].c.values[0]
return df
dataframe = dataframe.apply(replace, 1)
输出:
a b c
0 1 5 0
1 2 4 0
2 0 3 0
3 4 2 0
4 5 1 0
是你想要的吗?
使用map
by Series
created by set_index
:
df['c3'] = df['c3'].map(df.set_index('c1')['c2']).fillna(df['c3'])
update
的替代解决方案:
df['c3'].update(df['c3'].map(df.set_index('c1')['c2']))
print (df)
c1 c2 c3
0 a d f
1 b e z
2 c f e