是否有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代码可以从数据框中的列中转移和总计/计数数据的主要内容,如果未能解决你的问题,请参考以下文章