Pandas:基于另一列的映射值创建新列

4
我想在Python中根据另一列的条件创建一个新列。更具体地说,我的数据帧(DataFrame)中的一列是:
Kilos:
1. 8.0
2. 16.0
3. 12.0
4. 10.0
5. 5.0
...

我希望新列基于此列,每当在“Kilos”列中找到一个行,其重量为8.0时,“新列”的行将写入“X2 + parts”,并且当该列为16.0时,“新列”的行将写入“X8 + parts”,对于其他列,我不关心。它们可以是空白或其他任何内容。


这个回答解决了你的问题吗?基于if-elif-else条件创建新列 - FBruzzesi
1
是的,它可以。非常感谢! - Alexandros Giannakakis
2个回答

5
在下面的示例中,您将创建一个值映射字典(valmap),用于将您的 8.016.0 值映射到所需的文本。

样例代码:

import pandas as pd

# Create dataset.
data = {'Kilos': [8.0, 16.0, 12.0, 10.0, 5.0]}
df = pd.DataFrame(data)

# Create a value map dict for mapping specific values.
valmap = {8.0: 'X2 + parts', 16.0: 'X8 + parts'}
# Apply the value map into a new column.
df['Text'] = df['Kilos'].map(valmap)

# Show the results.
print(df)

输出:

   Kilos        Text
0    8.0  X2 + parts
1   16.0  X8 + parts
2   12.0         NaN
3   10.0         NaN
4    5.0         NaN

希望这可以指引您朝着正确的方向前进。

0
你可以使用np.select()。你可以创建条件并将它们与每个条件的结果一起填充到该方法中。
以下是你的初始数据框,然后是条件和使用np.select()的方法:
df=pd.DataFrame({'kilos':[8.0, 16.0, 12.0, 10.0, 5.0]})
df
   kilos
0    8.0
1   16.0
2   12.0
3   10.0
4    5.0

kilos_8 = df['kilos']==8   #condition 1
kilos_16 = df['kilos']==16  #condition 2

df['new_col']=np.select([kilos_8, kilos_16],
                        ['X2 + parts', 'X8 + parts'],
                          default=np.nan)
df
   kilos     new_col
0    8.0  X2 + parts
1   16.0  X8 + parts
2   12.0         nan
3   10.0         nan
4    5.0         nan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接