gpt4 book ai didi

Python - 如何迭代数据帧并将一个单元格中的值替换为同一行中另一个单元格中的值

转载 作者:行者123 更新时间:2023-12-01 02:05:09 25 4
gpt4 key购买 nike

我正在尝试在食品成分数据框中创建一个新列,根据同一行中其他单元格的信息,每行具有唯一值。

该表基本上如下所示:

ingredient_name | ingredient_method | consolidated_name
Cheese | [camembert, pkg] |
Cheese | [cream, pastueri] |
Egg | [raw, scrambled] |

我尝试遍历行并使用 ingredient_nameingredient_method 中的值填充 consolidated_name 列。
例如,如果 ingredient_name 是“Cheese”,我希望该行的合并名称成为 ingredient_method 中列表的第一个元素。

这是我到目前为止的代码:

for i, row in df.iterrows():
consolidated = df['ingredient_name']
if (df['ingredient_name'] == 'Cheese').all():
consolidated = df['ingredient_method'][0]
df.set_value(i,'consolidated_name',consolidated)

代码运行没有错误,但数据帧中的任何值都没有更改。
有什么想法吗?

最佳答案

可以使用.loc(与.str[0]组合)

与:

df = pd.DataFrame(dict(ingredient_name=['Cheese','Cheese','Egg'],
ingredient_method=[['camembert', 'pkg'],
['cream', 'pastueri'],
['raw', 'scrambled']]))

做:

#Initialize consolidated_name with None for instance
df['consolidated_name'] = [None]*len(df) #Not mandatory, will fill with NaN if not set

#Use .loc to get the rows you want and .str[0] to get the first elements
_filter = df.ingredient_name=='Cheese' #Filter you want to
df.loc[_filter,'consolidated_name'] = df.loc[_filter,'ingredient_method'].str[0]

结果:

print(df)
ingredient_method ingredient_name consolidated_name
0 [camembert, pkg] Cheese camembert
1 [cream, pastueri] Cheese cream
2 [raw, scrambled] Egg None
<小时/>

注意

#1
如果您想合并所有重复的成分,您可以使用以下内容进行过滤:

_duplicated = df.ingredient_name[df.ingredient_name.duplicated()]
_filter = df.ingredient_name.isin(_duplicated)

.loc 的使用保持不变,请参见下一个示例:

df = pd.DataFrame(dict(ingredient_name=['Cheese','Cheese','Egg','Foo','Foo'],
ingredient_method=[['camembert', 'pkg'],
['cream', 'pastueri'],
['raw', 'scrambled'],
['bar', 'taz'],
['taz', 'bar']]))

_duplicated = df.ingredient_name[df.ingredient_name.duplicated()]
_filter = df.ingredient_name.isin(_duplicated)
df.loc[_filter,'consolidated_name'] = df.loc[_filter,'ingredient_method'].str[0]
print(df)

ingredient_method ingredient_name consolidated_name
0 [camembert, pkg] Cheese camembert
1 [cream, pastueri] Cheese cream
2 [raw, scrambled] Egg NaN
3 [bar, taz] Foo bar
4 [taz, bar] Foo taz

#2
如果您愿意,可以使用 ingredient_name 进行初始化:

df['consolidated_name'] = df.ingredient_name

然后做你的事情:

_duplicated = df.ingredient_name[df.ingredient_name.duplicated()]
_filter = df.ingredient_name.isin(_duplicated)
df.loc[_filter,'consolidated_name'] = df.loc[_filter,'ingredient_method'].str[0]
print(df)

ingredient_method ingredient_name consolidated_name
0 [camembert, pkg] Cheese camembert
1 [cream, pastueri] Cheese cream
2 [raw, scrambled] Egg Egg #Here it has changed
3 [bar, taz] Foo bar
4 [taz, bar] Foo taz

关于Python - 如何迭代数据帧并将一个单元格中的值替换为同一行中另一个单元格中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49153230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com