【发布时间】:2019-10-09 14:15:55
【问题描述】:
当找到D 时,我想添加否定Income 的值
# Preparing data
# Note that I have clean up the `jan` to `Jan` and `Charge` to `charge`
[In]
data = [{'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k', 'Income': 200},
{'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k', 'Income': 10},
{'Month': 'Feb', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'd', 'Ex/Im': 'export', 'Income': 100},
{'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k', 'Income': 400},
{'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k', 'Income': 10},
{'Month': 'Feb', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'd', 'Ex/Im': 'export', 'Income': 200}]
[Out] Months Name id Info d/k Ex/Im Income
0 Jan Alice sal 212 charge k export 200
1 Jan Alice sal 212 charge k export 10
2 Jan Alice sal 212 charge d export 100
3 Jan Alice sal 212 charge k Import 400
4 Jan Alice sal 212 charge k Import 10
5 Jan Alice sal 212 charge d Import 200
df = pd.DataFrame(data)
*注意: 我的数据框中的名字不仅是 alice sal,我的每个名字都有类似的情况
我已经试过了
# 1. Negate the values of `Income` when `D` is found,
[In]:
df.loc[df['d/k'] == 'D', 'Income'] = -df[df['d/k'] == 'D']['Income']
print(df)
[Out]
Months Name id Info d/k Ex/Im Income
0 Jan Alice sal 212 charge k export 200
1 Jan Alice sal 212 charge k export
2 Jan Alice sal 567 charge d export
3 Jan Alice sal 212 charge k Import 400
4 Jan Alice sal 212 charge k Import
5 Jan Alice sal 567 charge d Import
# 2. Group by
[In]:
gdf = df.groupby(['id', 'Month', 'Ex/Im', 'Info']).agg({'Income':'sum', 'Name':'first'})
print(gdf)
[Out]:
Income
Month Jan
Ex/Im export import
Info charge charge
id Name
212 Alice sal 200 400
其他错误警告:
FutureWarning:元素比较失败;而是返回标量,但将来将执行元素比较 结果 = 方法(y)
我的预期:
Income
Month Jan
Ex/Im export import
Info charge charge
id Name
212 Alice sal 120 210
【问题讨论】: