python - 在列中查找所有相同的元素并创建一个新文件
问题描述
我有一个包含几列的 excel 电子表格。其中一列具有相似的元素值。我想写入一个新的文本文件,其中包含 .Column A
中具有相似元素的所有元素。相似元素的Column C
一个示例是 C 列中包含 USA 的值。示例输出将是包含 A 列中的值的文本文件:
Column A
1
2
5
例如:
Column A Column B Column C
1 3 USA
2 2 USA
3 5 China
5 7 USA
我尝试使用 openpyxl 和 pandas 但对逻辑感到困惑:
import openpyxl
from openpyxl import *
import os
wb = openpyxl.load_workbook('C:/Users/unknown/Desktop/filessed.xlsx')
ws = wb.get_sheet_by_name('files sheet')
#wb = load_workbook(filename_and_path, read_only=True)
ws = wb.active
for row in ws.iter_rows(min_row=1, min_col=1, max_row=6, max_col=4):
for cell in row:
print(cell.value)
print()
如何使用column C
名称作为文本文件的名称写入新文件,并在元素Column A
相似的情况下将元素写入Column C
?
解决方案
给定以下数据框:
df = pd.DataFrame([[1, 3, 'USA'], [2, 2, 'USA'], [3, 5, 'China'], [4 ,7, 'USA']], columns =['A','B','C'])
A B C
0 1 3 USA
1 2 2 USA
2 3 5 China
3 4 7 USA
试试这个单行代码,使用grupby、apply和to_csv:
df.groupby('C').apply(lambda row: row[['A']].to_csv(row.C.values[0]+'.csv', index=False))
这应该可以解决您的棘手问题。
提示:如果您不想将文件保存在 csv 中,而是希望将其保存为 excel 格式,请参阅to_excel pandas 函数。
相反,如果您想稍后将数据写入文件,则可以通过这种方式创建一个包含您感兴趣的数据的数据框:
df.groupby('C').apply(lambda row: row.A.values)
# output:
C
China [3]
USA [1, 2, 4]
或使用groupby.agg:
df.groupby('C').agg({'A': lambda row: list(row.values)})
通过这种方式,您可以创建一个字典:
df.groupby('C').agg({'A': lambda row: list(row.values)}).to_dict()['A']
# output: {'China': [3], 'USA': [1, 2, 4]}
推荐阅读
- c++ - std::shared_ptr 复制构造函数线程安全
- jquery - 具有向下滑动效果的置顶标题
- java - JSP 起始页错误:解析模板时出错,模板可能不存在或可能无法被任何已配置的模板解析器访问
- reactjs - -bash:react-native:找不到命令 mac
- c# - 如何修复“MediaElement 不包含 CurrentState 的定义”
- java - 集群上的 Spark 进程是一个 java 进程
- python - 如何在 Kivy 中切换小部件的动画过渡
- java - Android Firebase 如何从当前用户 ID 读取数据?
- python - PACF 图是否显示大于 1 或小于 -1 的值?
- sass - 使用 BEM 进行 Sass 嵌套