python-3.x - Python Pandas 通过在某些位置对数据进行切片来创建多个数据帧
问题描述
我是 Python 和使用编程进行数据分析的新手。我有一个很长的 csv,我想动态创建 DataFrame 并稍后绘制它们。这是与我的 csv 文件中存在的数据类似的 DataFrame 示例
df = pd.DataFrame(
{"a" : [4 ,5, 6, 'a', 1, 2, 'a', 4, 5, 'a'],
"b" : [7, 8, 9, 'b', 0.1, 0.2, 'b', 0.3, 0.4, 'b'],
"c" : [10, 11, 12, 'c', 10, 20, 'c', 30, 40, 'c']})
如图所示,每列中都有重复的元素。所以我首先需要找到重复的索引,然后使用它来制作子集。这是我这样做的方式。
find_Repeat = df.groupby(['a'], group_keys=False).apply(lambda df: df if
df.shape[0] > 1 else None)
repeat_idxs = find_Repeat.index[find_Repeat['a'] == 'a'].tolist()
如果我打印 repeat_idxs,我会得到
[3, 6, 9]
这就是我最终想要实现的例子
dfa_1 = df['a'][Index_Identifier[0], Index_Identifier[1])
dfa_2 = df['a'][Index_Identifier[1], Index_Identifier[2])
dfb_1 = df['b'][Index_Identifier[0], Index_Identifier[1])
dfb_2 = df['b'][Index_Identifier[1], Index_Identifier[2])
但这既不高效也不方便,因为我需要创建许多这样的 DataFrame 以便稍后进行绘图。所以我尝试了以下方法
dfNames = ['dfa_' + str(i) for i in range(len(repeat_idxs))]
dfs = dict()
for i, row in enumerate(repeat_idxs):
dfName = dfNames[i]
slices = df['a'].loc[row:row+1]
dfs[dfName] = slices
如果我打印 dfs,这正是我想要的。
{'df_0': 3 a
4 1
Name: a, dtype: object, 'df_1': 6 a
7 4
Name: a, dtype: object, 'df_2': 9 a
Name: a, dtype: object}
但是,如果我想阅读我的 csv 并应用上述内容,我就没有得到想要的东西。我可以从 csv 文件中找到重复的索引,但我无法正确切片数据。我假设我没有正确读取 csv 文件。我附上了 csv 文件以进一步澄清csv 文件
解决方案
两种选择:
循环和切片
检测重复行索引,然后循环遍历数据帧的连续块,忽略重复行:
# detect rows for which all values are equal to the column names
repeat_idxs = df.index[(df == df.columns.values).all(axis=1)]
slices = []
start = 0
for i in repeat_idxs:
slices.append(df.loc[start:i - 1])
start = i + 1
结果是一个 dataframes 列表slices
,它们是按顺序排列的数据切片。
使用熊猫 groupby
如果您愿意,也可以使用 pandas groupby 在一行中执行此操作:
grouped = df[~(df == df.columns.values).all(axis=1)].groupby((df == df.columns.values).all(axis=1).cumsum())
您现在可以像这样遍历组:
for i, group_df in grouped:
# do something with group_df
推荐阅读
- php - 如何在 Laravel 路由期间防止多个斜杠?
- vim - 使用 ctags 在 fortran 中识别 #define 编译器指令
- android - 属性布局 ScrollFlag 未找到
- c - 从内核模块写入文件
- r - 在 Ubuntu 20.04 上安装 R 的最佳方式是什么?
- ios - 如何在swift中使用第一个后来的大写本地化字符串?
- julia - Julia 如何从 SymPy 求解集中获取系数
- flutter - 在 dart 中操作 StackTrace
- wpf - Giving my ContextMenu style treatment not working
- python - 从纸空间梯度笔记本连接谷歌驱动器 - ERR_CONNECTION_REFUSED