基于多列值的 Python pandas groupby 值

2024-02-23

我在 Pandas 数据集中有一个连续的活动数据。

#sample data code 
user_id = [9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,4705,4705,4705,4705,4705,223,223,223,223,223,223,223,223]
transaction_Value= [50,125,0,100,0,1000,473,0,47,110,0,44,93,0,49,92,0,242,0,75,0,47,122,0,50,100,200,0,35,85,0,50]
Campaign = ['M1','M1','Used','M1','Used','W1','Used','Used','W2','W2','Used','W2','W2','Used','W2','W2','Used','O1','Used','W3','Used','W2','S1','Lost','M1','M1','M1','Used','W2','S2','Lost','S2',]
transaction_c= [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,1,2,3,4,5,1,2,3,4,5,6,7,8]
 
df = pd.DataFrame(list(zip(user_id,transaction_Value,Campaign,transaction_c)), columns =['user_id','transaction_Value', 'Campaign','transaction_c'])

到目前为止,我已经使用以下代码对数据进行分组

df2 = (df.set_index(['user_id',df.groupby('user_id').cumcount()])[('transaction_Value')]
         .unstack(fill_value='')
         .reset_index())

这会根据交易编号转置该值

| user_id | 0  | 1   | 2   | 3   | 4  | 5    | 6   | 7  | 8  | 9   | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17  | 18 |
|---------|----|-----|-----|-----|----|------|-----|----|----|-----|----|----|----|----|----|----|----|-----|----|
| 9       | 50 | 125 | 0   | 100 | 0  | 1000 | 473 | 0  | 47 | 110 | 0  | 44 | 93 | 0  | 49 | 92 | 0  | 242 | 0  |
| 223     | 50 | 100 | 200 | 0   | 35 | 85   | 0   | 50 |    |     |    |    |    |    |    |    |    |     |    |
| 4705    | 75 | 0   | 47  | 122 | 0  |      |     |    |    |     |    |    |    |    |    |    |    |     |    |

如何编写代码,以便每次行值更改为used or lost

我可以对营销活动值执行相同的操作,然后将这两个数据框堆叠在一起

理想输出

| user_id | Type        | 1    | 2    | 3    | 4    |
|---------|-------------|------|------|------|------|
| 9       | Campaign    | M1   | M1   | Used |      |
| 9       | Campaign    | M1   | Used |      |      |
| 9       | Campaign    | W1   | Used |      |      |
| 9       | Campaign    | Used |      |      |      |
| 9       | Campaign    | W2   | W2   | Used |      |
| 9       | Campaign    | W2   | W2   | Used |      |
| 9       | Campaign    | W2   | W2   | Used |      |
| 9       | Campaign    | O1   | Used |      |      |
| 223     | Campaign    | M1   | M1   | M1   | Used |
| 223     | Campaign    | W2   | S2   | Lost |      |
| 223     | Campaign    | S2   |      |      |      |
| 9       | Transaction | 50   | 125  | 0    |      |
| 9       | Transaction | 100  | 0    |      |      |
| 9       | Transaction | 1000 | 473  |      |      |
| 9       | Transaction | 0    |      |      |      |
| 9       | Transaction | 47   | 110  | 0    |      |
| 9       | Transaction | 44   | 93   | 0    |      |
| 9       | Transaction | 49   | 92   | 0    |      |
| 223     | Transaction | 242  | 0    |      |      |
| 223     | Transaction | 50   | 100  | 200  | 0    |
| 223     | Transaction | 35   | 85   | 0    |      |
| 223     | Transaction | 50   |      |      |      |

感谢解决此问题的所有帮助。 谢谢 :)


通过测试创建组Campaign by Series.isin http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.isin.html更改顺序为iloc并创建组Series.cumsum http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.cumsum.html, 添加到set_index and groupby然后使用DataFrame.stack http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.stack.html按第三级排序,最后删除第二级并转换MultiIndex到列:

g = df['Campaign'].isin(['Used','Lost']).iloc[::-1].cumsum().iloc[::-1]
g = pd.factorize(g)[0]

df2 = (df.set_index(['user_id',g, df.groupby(['user_id', g]).cumcount()])[['Campaign','transaction_Value']]
          .unstack(fill_value='')
          .stack(0)
          .sort_index(level=[2])
          .rename_axis(['user_id','Campaign','Type'])
          .reset_index(level=1, drop=True)
          .reset_index())

print (df2)
    user_id               Type     0     1     2     3
0         9           Campaign    M1    M1  Used      
1         9           Campaign    M1  Used            
2         9           Campaign    W1  Used            
3         9           Campaign  Used                  
4         9           Campaign    W2    W2  Used      
5         9           Campaign    W2    W2  Used      
6         9           Campaign    W2    W2  Used      
7         9           Campaign    O1  Used            
8       223           Campaign    M1    M1    M1  Used
9       223           Campaign    W2    S2  Lost      
10      223           Campaign    S2                  
11     4705           Campaign    W3  Used            
12     4705           Campaign    W2    S1  Lost      
13        9  transaction_Value    50   125     0      
14        9  transaction_Value   100     0            
15        9  transaction_Value  1000   473            
16        9  transaction_Value     0                  
17        9  transaction_Value    47   110     0      
18        9  transaction_Value    44    93     0      
19        9  transaction_Value    49    92     0      
20        9  transaction_Value   242     0            
21      223  transaction_Value    50   100   200     0
22      223  transaction_Value    35    85     0      
23      223  transaction_Value    50                  
24     4705  transaction_Value    75     0            
25     4705  transaction_Value    47   122     0      
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于多列值的 Python pandas groupby 值 的相关文章

随机推荐

  • Javascript crc32 函数和 PHP crc32 不匹配

    我正在开发一个 web 应用程序 我想将 PHP 中服务器端生成的一些 crc32 值与我在 Javascript 中生成的一些 crc32 值进行匹配 两者都使用相同的输入字符串但返回不同的值 我在webtoolkit上找到了一个crc3
  • Python:有吸引力的、干净的、可打包的 Windows GUI 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要为最终用户下载的桌面应用程序创建一个简单的基于 Windows 的 GUI 该应用程序是用 python 编写的 并将打包为安装程序
  • 在c中读取/写入bmp文件

    我正在尝试处理 bmp 文件 首先 我尝试从 bmp 文件读取标题和数据并将其写入新文件 pragma pack push 1 Windows 3 x bitmap file header typedef struct char filet
  • golang http2 服务器推送的高级客户端

    golang 1 6 发布 支持 Http2 我在网上搜索 但找不到任何有关如何使用 Go 进行 Http2 服务器推送的示例 是否有为此实现的高级客户端 人们已经做过什么例子了吗 std 库中的 http2 实现不公开 http2 特定的
  • AngularJS 和 i18next

    我见过一些 Angular 的 i18n 插件 但我不想重新发明轮子 i18next 是一个很好的库 所以我打算使用它 我创建了一个指令 i18n 它只调用 i18n 库 define app jquery i18n function ap
  • 按年份划分的R组

    我将 csv 读入 R 现在我有了一个数据列表 head data Date Open High Low Close Volume 1 31 Dec 14 223 09 225 68 222 25 222 41 2402097 2 30 D
  • Android - 使用动画的工件

    应用发现的 3D 转换时 我遇到屏幕上的视觉伪影问题here http developer android com resources samples ApiDemos src com example android apis animat
  • d3.js - 变换和过渡,多行

    我已按照以下说明进行操作 http bost ocks org mike path http bost ocks org mike path 用于用单线创建单图并对其进行动画处理 并且 弄清楚如何在图表中创建多条线 在 D3 js 中绘制多
  • 代码以交互方式运行时显示结果,但从 shell 运行时不显示结果

    我从另一张海报上借用了这个科学记数法小脚本 以科学记数法显示小数 https stackoverflow com questions 6913532 python how to convert decimal to scientific n
  • 音频 API 示例中的“安全错误”代码:“1000”

    我试图重复这个例子here https wiki mozilla org Audio Data API Complete Example 3a Visualizing Audio Spectrum 但收到此错误 Security error
  • C# 中的 DataGridView 组合框单元格事件

    我想在 DataGridViewComboBox 中的项目发生更改时显示一条消息 我可以通过 datagridview CellbeginEdit 事件和 CellEndEdit 事件的帮助来部分执行它 但这还不够 我希望它发生在组合框选择
  • 如何在ios应用程序中播放RTMP视频流?

    嗨 我正在开发广播应用程序 我正在使用 Videocore 库 现在我如何在 ios 应用程序中播放该流视频 我尝试使用 MpMoviePlayer 但它不支持 rtmp 流 那么是否有任何第三方库可供 RTMP 支持的播放器使用 请帮助我
  • 未创建表 sqlite android

    我正在制作一个应用程序 我想在其中保存用户联系人详细信息 但是每当我尝试插入或选择某些值时 我都会收到错误 数据库代码 public class ContactsDatabase extends SQLiteOpenHelper priva
  • 获取Java中注解的参数值

    所以我有一个代码 Path foo public class Hello GET Produces text html public String getHtml Context Request request Context HttpSe
  • 扭曲的Python getPage

    我试图获得这方面的支持 但我完全感到困惑 这是我的代码 from twisted internet import reactor from twisted web client import getPage from twisted web
  • 编辑控件未使用所选画笔完全重新绘制

    我有一个编辑控件 其背景颜色取决于用户输入的有效性 如果输入有效 编辑控件应保持默认外观 否则背景颜色应更改为浅灰色 我正在检查有效性EN UPDATE处理程序 如果它无效 我存储HWND的编辑控件到vector 视觉样式已启用 当我改变鼠
  • 如何修复错误代码 C4146“一元减运算符应用于无符号类型。结果仍然无符号”?

    数据类型int的最小值为 2 147 483 648 所以 我输入了 int val 2147483648 但是 它有一个错误 unary minus operator applied to unsigned type result sti
  • 如何将 ArrayUtils 用于对象数组,它不会删除数组的内容

    如何删除对象数组的内容 如果还有其他方法可以删除对象数组的内容 请分享 import java util Arrays import java util Scanner import org apache commons lang3 Arr
  • IE中Jquery多级列表问题

    首先对我的英语感到抱歉 好吧 我尝试创建一个可排序的问题 答案列表 它在 FF 中完美运行 但在 IE 中不起作用 在 IE 中 当我尝试对答案 第二级 li 进行排序时 其问题和同一组答案以一种奇怪的方式与所选问题一起移动 Example
  • 基于多列值的 Python pandas groupby 值

    我在 Pandas 数据集中有一个连续的活动数据 sample data code user id 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 4705 4705 4705 4705 4705 223 223