我有一份销售数据。我想再添加两列,突出显示其他列中的重要值。
目前我的代码会在每次销售时将值返回到新列中。因此,如果主题出现在Sales
列中,则相应的值将在新列中编入索引。
import pandas as pd
import numpy as np
a = 5
N = 10
df = pd.DataFrame({
'Tom_$' : [500, 50, 10, 60, 50, 77, 30, 600, 40, 60],
'Tom_c' : [100, 20, 40, 50, 0, 67, 90, 100, 0, 0],
'Code' : ['nan', 'nan', 'Big', 'nan', 'nan', 'Small', 'nan','nan', 'nan','nan'],
'Sales' : ['nan','nan','Tom','nan','nan','Tom','nan','nan','nan','nan']})
df['Big'] = df.apply(lambda row: row.get(row['Sales']+'_$') if pd.notnull(row['Sales']) else np.nan, axis=1)
df['Small'] = df.apply(lambda row: row.get(row['Sales']+'_c') if pd.notnull(row['Sales']) else np.nan, axis=1)
输出:
Code Julie_$ Julie_c Sales Tom_$ Tom_c Dollars Cents
0 nan 500 300 nan 500 100 NaN NaN
1 nan 40 20 nan 50 20 NaN NaN
2 Big 10 70 Tom 10 40 10.0 40.0
3 nan 10 50 nan 60 50 NaN NaN
4 nan 50 80 nan 50 0 NaN NaN
5 Small 37 67 Tom 77 67 77.0 67.0
6 nan 30 50 nan 30 90 NaN NaN
7 Big 900 100 Julie 600 100 900.0 100.0
8 nan 40 40 nan 40 0 NaN NaN
9 nan 50 0 nan 60 0 NaN NaN
这很好用,但我想使用Code
列添加另一个图层。如果此列中的值为Big
,我希望继续返回销售员值,直到新的销售为止。如果它是Small
我不在乎。
所以输出结果为:
Code Julie_$ Julie_c Sales Tom_$ Tom_c Dollars Cents
0 nan 500 300 nan 500 100 NaN NaN
1 nan 40 20 nan 50 20 NaN NaN
2 Big 10 70 Tom 10 40 10.0 40.0
3 nan 10 50 nan 60 50 60.0 50.0
4 nan 50 80 nan 50 0 50.0 0.0
5 Small 37 67 Tom 77 67 77.0 67.0
6 nan 30 50 nan 30 90 NaN NaN
7 Big 900 100 Julie 600 100 900.0 100.0
8 nan 40 40 nan 40 0 40.0 0.0
9 nan 50 0 nan 60 0 60.0 0.0
我考虑使用类似的方法返回Sales
列
df['Dollars'] = df.apply(lambda row: row.get(row['Sales']+'_$') if pd.notnull(row['Sales']) else np.nan, axis=1)
df['Cents'] = df.apply(lambda row: row.get(row['Sales']+'_c') if pd.notnull(row['Sales']) else np.nan, axis=1)
但这仅在值处于同一索引时才有效。我有点困惑。我不确定是否应填写数据,因此Code
列中始终存在值。
Code
0 nan
1 nan
2 Big
3 Big
4 Big
5 Small
6 Small
7 Big
8 Big
9 Big
然后我可以选择重要的那些。但我不愿改变原始数据集。
答案 0 :(得分:0)
您可以在NaN
列的Sales
列中使用ffill
的替换值,通过前缀Code
是Big
或{{ 1}}:
Small