簡體   English   中英

如何拆分列元素並替換為 python dataframe 中的其他列值?

[英]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 是如何實現iterrowsloc的。

請注意,條件 -- '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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM