我有一个看起来像这样的数据框:
Categor_1 Categor_2 Numeric_1 Numeric_2 Numeric_3 Numeric_col4 Month
ABC XYZ 3523 454 4354 565 2018-02
ABC XYZ 333 444 123 565 2018-03
qww ggg 3222 568 123 483976 2018-03
我想对具有条件的列应用一些简单的数学运算,并将其分配给另一行。
例如
如果为Month == 2018-03 & Categor_2 == 'XYZ'
,请执行Numeric_3*2
,然后在2018-02个月将其分配给Numeric_3
。
所以输出将类似于:
Categor_1 Categor_2 Numeric_1 Numeric_2 Numeric_3_ Adj Numeric_col4 Month
ABC XYZ 3523 454 246 565 2018-02
ABC XYZ 333 444 123 565 2018-03
qww ggg 3222 568 123 483976 2018-03
我正在考虑取出必要的列,然后做一个枢轴,应用数学,然后再次以原始方式重塑它。 但是,如果有一种快速的方法,不胜感激
答案 0 :(得分:1)
这取决于过滤后的DataFrame系列的长度-这是一个元素系列,因此如果条件不匹配,则可以通过next
和iter
设置标量,以便可能添加默认值:
mask = (df.Month == '2018-03') & (df.Categor_2 == 'XYZ')
print (df.loc[mask, 'Numeric_3'] * 3)
1 369
Name: Numeric_3, dtype: int64
#get first value of Series, if emty Series is returned 0
a = next(iter(df.loc[mask, 'Numeric_3'] * 3), 0)
print (a)
369
df.loc[df.Month == '2018-02', 'Numeric_3'] = a
print (df)
Categor_1 Categor_2 Numeric_1 Numeric_2 Numeric_3 Numeric_col4 Month
0 ABC XYZ 3523 454 369 565 2018-02
1 ABC XYZ 333 444 123 565 2018-03
2 qww ggg 3222 568 123 483976 2018-03