python进行分组运算后的问题

xxii12 2019-02-14 08:31:44
请教,对于分组后的结果,想根据这个结果赋值一个新列,应该如何实现?非常感谢!

例如:根据“交易组编号”分组,对同一组内的金额做判断,如果同一组的2个记录金额相同,则在新列中返回'1', 也就是对于同样交易组编号的两行的新列,都对应返回‘1’。反之在新列返回0.

交易组编号 成交编号 金额
05530092019020106217048 05530082019020106217049 1120.8
05530092019020106217048 05530082019020106217047 1120.8
05530092019020106216408 05530082019020106216409 10
05530092019020106216408 05530082019020106216407 5
05530092019020106216330 05530082019020106216331 10
05530092019020106216330 05530082019020106216329 5
05530092019020106216160 05530082019020106216161 1569.217484
05530092019020106216160 05530082019020106216159 1569.217484
05530092019020106216055 05530082019020106216056 10
05530092019020106216055 05530082019020106216054 5
05530092019020106216049 05530082019020106216050 1568.617202
05530092019020106216049 05530082019020106216048 1568.617202
...全文
322 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈年椰子 2019-02-18
  • 打赏
  • 举报
回复
像这种情况, 可能直接用 for 循环处理逻辑还简单些。
读到列表里, 排序, for 循环搞掂它。
xxii12 2019-02-18
  • 打赏
  • 举报
回复
引用 9 楼 陈年椰子的回复:
像这种情况, 可能直接用 for 循环处理逻辑还简单些。
读到列表里, 排序, for 循环搞掂它。
多谢帮助谢谢
陈年椰子 2019-02-17
  • 打赏
  • 举报
回复
如果是这样,函数及更新那里要多个日期条件。 大概思路如此。
陈年椰子 2019-02-17
  • 打赏
  • 举报
回复
意思是根据 组编号和日期分组?


df2 = df1.groupby(['BH','RQ']).sum().reset_index()

大概就是这样的形式。
xxii12 2019-02-17
  • 打赏
  • 举报
回复
引用 4 楼 陈年椰子的回复:
[quote=引用 2 楼 夏峥 的回复:]
[quote=引用 1 楼 陈年椰子的回复:]考虑下 pandas , 按 交易组编号、成交编号 分组, 取金额合计值和平均值, 新列 根据合计值和平均值*2比较 分别赋值。

谢谢,我遇到的障碍就在于,分组计算出结果后,不知道怎样把结果作为原基础数据的判断条件[/quote]
大概写了一下, 不知道数据量大的情况下效率如何
Python2.7 代码

import pandas as pd

list_A = [['05530092019020106217048', '05530082019020106217049', 1120.8],
['05530092019020106217048', '05530082019020106217047', 1120.8],
['05530092019020106216408', '05530082019020106216409', 10],
['05530092019020106216408', '05530082019020106216407', 5],
['05530092019020106216330', '05530082019020106216331', 10],
['05530092019020106216330', '05530082019020106216329', 5],
['05530092019020106216160', '05530082019020106216161', 1569.217484],
['05530092019020106216160', '05530082019020106216159', 1569.217484],
['05530092019020106216055', '05530082019020106216056', 10],
['05530092019020106216055', '05530082019020106216054', 5]]

df1 = pd.DataFrame(list_A)
df1.columns = ['BH', 'BH1', 'JE']
df2 = df1.groupby(['BH']).sum().reset_index()

def get_flag(x,y):
a1 = df2[df2['BH'] == x][['JE']]
for index, row in a1.iterrows():
if row[0]/2 == y:
return "1"
else:
return "0"

df1['FLAG'] = df1.apply(lambda x: get_flag(x.BH,x.JE), axis=1)
print df1


[/quote] 谢谢,很感谢!另外还想追问一下,如果要比较的是一组内的两个日期是否相等并作出判断,就不能用这种方式了吧,对于2019-01-01这种格式,是不是要先做转换?
xxii12 2019-02-17
  • 打赏
  • 举报
回复
引用 7 楼 陈年椰子的回复:
如果是这样,函数及更新那里要多个日期条件。 大概思路如此。
倒不是增加分组条件。分组仍然按组编号,但是比较同一个组内的两个日期是否相等
陈年椰子 2019-02-15
  • 打赏
  • 举报
回复
参考这个
https://blog.csdn.net/leo_weile/article/details/80817883

pandas将datafram中某列按照条件赋值方法
xxii12 2019-02-15
  • 打赏
  • 举报
回复
引用 1 楼 陈年椰子的回复:
考虑下 pandas , 按 交易组编号、成交编号 分组, 取金额合计值和平均值, 新列 根据合计值和平均值*2比较 分别赋值。
谢谢,我遇到的障碍就在于,分组计算出结果后,不知道怎样把结果作为原基础数据的判断条件
陈年椰子 2019-02-15
  • 打赏
  • 举报
回复
考虑下 pandas , 按 交易组编号、成交编号 分组, 取金额合计值和平均值, 新列 根据合计值和平均值*2比较 分别赋值。
陈年椰子 2019-02-15
  • 打赏
  • 举报
回复
引用 2 楼 夏峥 的回复:
[quote=引用 1 楼 陈年椰子的回复:]考虑下 pandas , 按 交易组编号、成交编号 分组, 取金额合计值和平均值, 新列 根据合计值和平均值*2比较 分别赋值。

谢谢,我遇到的障碍就在于,分组计算出结果后,不知道怎样把结果作为原基础数据的判断条件[/quote]
大概写了一下, 不知道数据量大的情况下效率如何
Python2.7 代码

import pandas as pd

list_A = [['05530092019020106217048', '05530082019020106217049', 1120.8],
['05530092019020106217048', '05530082019020106217047', 1120.8],
['05530092019020106216408', '05530082019020106216409', 10],
['05530092019020106216408', '05530082019020106216407', 5],
['05530092019020106216330', '05530082019020106216331', 10],
['05530092019020106216330', '05530082019020106216329', 5],
['05530092019020106216160', '05530082019020106216161', 1569.217484],
['05530092019020106216160', '05530082019020106216159', 1569.217484],
['05530092019020106216055', '05530082019020106216056', 10],
['05530092019020106216055', '05530082019020106216054', 5]]

df1 = pd.DataFrame(list_A)
df1.columns = ['BH', 'BH1', 'JE']
df2 = df1.groupby(['BH']).sum().reset_index()

def get_flag(x,y):
a1 = df2[df2['BH'] == x][['JE']]
for index, row in a1.iterrows():
if row[0]/2 == y:
return "1"
else:
return "0"

df1['FLAG'] = df1.apply(lambda x: get_flag(x.BH,x.JE), axis=1)
print df1


37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧