是否有python代码可以从数据框中的列中转移和总计/计数数据

Posted

技术标签:

【中文标题】是否有python代码可以从数据框中的列中转移和总计/计数数据【英文标题】:Is there a python code to shift and total/count data from a column in a dataframe 【发布时间】:2021-11-30 06:18:12 【问题描述】:

原来的表格是这样的:

| s/n  | i.d |  T1  |
|------|-----|------|
|  0   |  A  |   2  |
|  1   |  B  |   2  |
|  2   |  C  |   0  |
|  3   |  A  |   2  |
|  4   |  B  |   0  | 
|  5   |  C  |   2  | 
|  6   |  A  |   1  |
|  7   |  B  |   0  |
|  8   |  C  |   1  |

决赛桌是这样的:

| s/n  | i.d |  T1  |prev_total_T1 | prev_no_of_T1_2  |
|------|-----|------|--------------|------------------|
|  0   |  A  |   2  |      0       |        0         |   
|  1   |  B  |   2  |      0       |        0         |     
|  2   |  C  |   0  |      0       |        0         |    
|  3   |  A  |   2  |      2       |        1         |    
|  4   |  B  |   0  |      2       |        1         |    
|  5   |  C  |   2  |      0       |        0         |     
|  6   |  A  |   1  |      4       |        2         |    
|  7   |  B  |   0  |      2       |        1         |     
|  8   |  C  |   1  |      2       |        1         | 

prev_total_T1 == (移位并合计上一条记录并更新) 只需将个人身份证上的 T1 总数相加即可。 即,对于第一个实例,i.d A,B,C 没有以前的 T1 数据,因此它们分别为 0,0,0 第二个实例,i.d A,B,C 分别有 2,2,0 第三个实例,i.d A,B,C 分别有 2,0,2 和 2,2,0 数据,所以我们将它们相加分别得到 4,2,2

prev_no_of_T1_2 == (移位并统计上一条记录并更新) 即数字“2”出现在 T1 列中的每一个先前次数增加 1 首先,A,B,C 中没有以前的记录,所以我们分别写 0,0,0 对于第二种情况,数字“2”之前出现在 i.d A 和 B 中,而不是在 i.d C 中,所以我们分别写 1,1,0 对于第三个实例,数字“2”之前出现在 id A 和 C 中,但不在 B 中,因此它产生 1,0,1(分别为 id A,B,C),但我们将其与之前的单个结果 1,1 相加,0 + 1,0,1 我们有 2,1,1 分别对应 id A,B,C 等等

【问题讨论】:

【参考方案1】:

您需要将数据与i.d 列分组并使用shift 函数执行移位,并将移位后的数据再次与i.d 分组并使用cumsum 得到prev_no_of_T1。对于prev_no_of_T1_2,只需将prev_no_of_T1 除以2。

import pandas as pd
df = pd.read_csv('test2.csv')
#shift the data groupwise
df['shifted'] = df.groupby('i.d')['T1'].shift(1).fillna(0)
# take grouwise cumulative sum
df['prev_total_T1'] = df.groupby('i.d')['shifted'].cumsum().fillna(0)
# divide the  prev_total_T1 with 2
df['prev_no_of_T1_2'] = df['prev_total_T1']/2
s/n i.d T1 shifted prev_total_T1 prev_no_of_T1_2
0 A 2 0 0 0
1 B 2 0 0 0
2 C 0 0 0 0
3 A 2 2 2 1
4 B 0 2 2 1
5 C 2 0 0 0
6 A 1 2 4 2
7 B 0 0 2 1
8 C 1 2 2 1

【讨论】:

以上是关于是否有python代码可以从数据框中的列中转移和总计/计数数据的主要内容,如果未能解决你的问题,请参考以下文章

从数据框中的列中获取第一个和最后一个值

逻辑操作:从数据框中的列中选择两个值

如何从熊猫数据框中的列中删除字符串值

从 pyspark 数据框中的列中提取特定字符串

如何从包含文本的熊猫数据框中的列中提取年份(或日期时间)

从数据框中的列中采样唯一行而不进行替换