首页 > 解决方案 > 在数据框中,根据过滤条件将选定的单元格复制到同一数据框中的另一行

问题描述

我想将基于另一个单元格过滤器的单元格值复制到特定行

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)

我想将“航班号”LX2104 行中的单元格“Bircher”和“Carac”复制到“航班号”LX2105 行。“STD 出发”中的值应保持不变

标签: pythonpython-3.xpandasdataframe

解决方案


你可以这样做,它可以在视觉上更清晰:

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]用来获取切片(正确的原始数据和列)。这df['Flight Number'] == 'LX2104'将返回一个带有真值的布尔数组,其中航班号是 LX2104,所以我们有一个需要的原始数据,然后我只需传递列名来获得所需的列。在右侧,我做同样的事情,但使用另一个航班号。请注意,如果它们的长度(原始数量)不同,它将无法正常工作。


推荐阅读