我想根据另一个单元格的过滤条件将单元格的值复制到特定行
import pandas as pd
sales = {'Flight Number': ['LX2104', 'LX2104', 'LX2104', 'LX2105', 'LX2105', 'LX2105', 'LX2106', 'LX2106', 'LX2106'],
'STD Departure': [0, 1, 2, 0, 1, 2, 0, 1, 2],
'Bircher': [200, 210, 90, 40, 20, 10, 10, 30, 20],
'Carac': [140, 215, 95,40, 50, 30, 40, 30, 50]}
df = pd.DataFrame.from_dict(sales)
我想将单元格“ Bircher”和“ Carac”从“航班号” LX2104的行复制到“航班号” LX2105”的行。“ STD出发”中的值应保持不变
答案 0 :(得分:1)
您可以执行此操作,它在视觉上会更清晰:
df.loc[df['Flight Number'] == 'LX2104', 'Bircher'] = df[df['Flight Number'] == 'LX2105'].Bircher.values
df.loc[df['Flight Number'] == 'LX2104', 'Carac'] = df[df['Flight Number'] == 'LX2105'].Carac.values
输出:
Flight Number STD Departure Bircher Carac
0 LX2104 0 40.0 40
1 LX2104 1 20.0 50
2 LX2104 2 10.0 30
3 LX2105 0 40.0 40
4 LX2105 1 20.0 50
5 LX2105 2 10.0 30
6 LX2106 0 10.0 40
7 LX2106 1 30.0 30
8 LX2106 2 20.0 50
您也可以使用,但我认为还不清楚:
df.loc[df['Flight Number'] == 'LX2104', ['Bircher', 'Carac']] = df[df['Flight Number'] == 'LX2105'][['Bircher', 'Carac']].values
我将尝试解释此代码。我使用df.loc[raw_index, column_index]
来获取切片(正确的Raws和columns)。这个df['Flight Number'] == 'LX2104'
将返回一个带有True值的布尔数组,其中航班号为LX2104,因此我们需要一个原始值,然后我只需传递列名就可以拥有一个需要的列。在右侧,我执行相同操作,但使用另一个航班号。请注意,如果它们的长度(原始数量)不同,将无法正常工作。