[英]How to split Dataframe column into two parts and replace column with splitted value
[英]How to split column element and replace by other column value in python dataframe?
我想用 col2 替換 col1 元素。 例如,如果 col1 包含 abc,我想用 a{colb}c 替換它。
import pandas as pd
d = {'col1': ['a b', 'a c'], 'col2': ['z 26', 'y 25']}
df = pd.DataFrame(data=d)
print(df)
col1 col2
a b z 26
a c y 25
如果 df['col1']=='a b' 則需要 output
col1 col2 col3
0 a b z 26 a z
1 a c y 25 a c
我試過了
df['col3'] = np.where(df[df['col1']=='a b'],(df['col1'].replace(str(df['col1'].str.split(' ')[1])),(str(df['col2'].str.split(' ')[0]))), 0)
error: ---error: operands could not be broadcast together with shapes (1,3) (2,) ()
&
for x in df['col1']:
x.replace(df['col1'].str.split(' ')[1],df['col2'].str.split(' ')[1])
#error --replace() argument 1 must be str, not list
建議簡單的解決方案...
我不完全確定我已經理解你在這里想做什么,但這符合你的要求:
for i, row in df2.iterrows():
if row["col1"] == "a b":
row["col1"] = "a " + row["col2"].split(" ")[0]
要逐行迭代 dataframe,您可以使用iterrows
,它返回(index, row)
的元組。
編輯請注意,使用此進行修改是未定義的。 如果不想直接使用row
可以修改原來的df,如果需要:
df2["col1"][i] = row["col1"]
(修改row
后。)
這很不簡單,毫無疑問,有一種方法可以通過 pandas 一步完成,但這種模式適用於任何東西。 它是否比“矢量化”解決方案慢取決於 pandas 是如何實現iterrows
和loc
的。
請注意,條件 -- 'ab' --- 在這里是硬編碼的,這似乎是您想要的。
import pandas as pd
d = {'col1': ['a b', 'a c'], 'col2': ['z 26', 'y 25']}
df = pd.DataFrame(data=d)
解決方案 1:
df.loc[(df['col1'] == 'a b'), 'col3'] = df['col1'].str[0] + ' ' + df['col2'].str[0]
df['col3'].fillna(df['col1'], inplace=True)
解決方案 2:
condition = (df['col1'] == 'a b')
df['col3'] = np.where((df['col1'] == 'a b'), df['col1'].str[0] + ' ' + df['col2'].str[0], df['col1'])
雖然這很混亂,但我設法在一行中完成了。 老實說,我不確定它是否完全符合您的要求,但如有必要,我可以幫助您進行修改。
df['col3'] = [f'{i[1].col1.split()[0]} {i[1].col2.split()[0]}' if i[1].col1 == 'a b' else i[1].col1 for i in df.iterrows()]
我找到了這樣的方法:拆分兩列並加入它們。 但是我一直在尋找替換和插入
df['col3'] = df['col1'].apply(lambda x:x.split(' ') [0]) +' '+ df['col2'].apply(lambda x:x.split(' ') [0])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.