python - 根据值拆分熊猫数据框
问题描述
我想将熊猫数据框拆分为组,以便分别处理每个组。我的“value.csv”文件包含以下数字
num tID y x height width
2 0 0 0 1 16
2 1 1 0 1 16
5 0 1 0 1 16
5 1 0 0 1 8
5 2 0 8 1 8
6 0 0 0 1 16
6 1 1 0 1 8
6 2 1 8 1 8
2 0 0 0 1 16
2 1 1 0 1 16
5 0 1 0 1 16
5 1 0 0 1 8
5 2 0 8 1 8
6 0 0 0 1 16
6 1 1 0 1 8
6 2 1 8 1 8
我想根据列的起始值拆分数据,0
就像tID
前 4 个分隔符一样。
第一的:
2 0 0 0 1 16
2 1 1 0 1 16
第二:
5 0 1 0 1 16
5 1 0 0 1 8
5 2 0 8 1 8
第三:
6 0 0 0 1 16
6 1 1 0 1 8
6 2 1 8 1 8
第四:
2 0 0 0 1 16
2 1 1 0 1 16
为此,我尝试使用 if 但没有成功来拆分它,有什么有效的想法吗?
import pandas as pd
statQuality = 'value.csv'
df = pd.read_csv(statQuality, names=['num','tID','y','x','height','width'])
df2 = df.copy()
df2.drop(['num'], axis=1, inplace=True)
x = []
for index, row in df2.iterrows():
if row['tID'] == 0:
x = []
x.append(row)
print(x)
else:
x.append(row)
解决方案
利用:
#create groups by consecutive values
s = df['num'].ne(df['num'].shift()).cumsum()
#create helper count Series for duplicated groups like `2_0`, `2_1`...
g = s.groupby(df['num']).transform(lambda x: x.factorize()[0])
#dictionary of DataFrames
d = {'{}_{}'.format(i,j): v.drop('num', axis=1) for (i, j), v in df.groupby(['num', g])}
print (d)
{'2_0': tID y x height width
0 0 0 0 1 16
1 1 1 0 1 16, '2_1': tID y x height width
8 0 0 0 1 16
9 1 1 0 1 16, '5_0': tID y x height width
2 0 1 0 1 16
3 1 0 0 1 8
4 2 0 8 1 8, '5_1': tID y x height width
10 0 1 0 1 16
11 1 0 0 1 8
12 2 0 8 1 8, '6_0': tID y x height width
5 0 0 0 1 16
6 1 1 0 1 8
7 2 1 8 1 8, '6_1': tID y x height width
13 0 0 0 1 16
14 1 1 0 1 8
15 2 1 8 1 8}
推荐阅读
- sql - 如何使用 TO_DATE 函数处理空值?
- java - Java 到 Kotlin_Gson.Json 转换错误
- java - 基于 Java 的 SIP 端点
- php - 链接到 zip 文件会在 Google Search Console 中创建“软 404”
- c# - 没有参考更新,Web 服务无法工作
- python - python字符串转换为json用于银行对帐单
- ios - iOS 中的可重用视图
- php - 在 XML 中访问命名空间以解析正确的数据 PHP/Laravel
- javascript - 具有 Preact SSR 和 RTL 支持的 Emotion.js
- python - find_all 具有多个表达式,用于包含指定的两个属性值的标记