我有以下数据框:
d = pd.DataFrame([['A', 1989, 100],
['A', 1990, 200],
['A', 2017, 100],
['B', 1989, 500],
['B', 1990, 200],
['C', 1990, 200],
['C', 19870, 400]],
columns=['Univers', 'year', 'amount'])
Univer year amount
0 A 1989 100
1 A 1990 200
2 A 2017 100
3 B 1989 500
4 B 1990 200
5 C 1990 200
6 C 19870 400
.
.
.
我想按Univer
执行过滤。我仅申请了A d2 = d[d['Univers']=='A']
:
Univers year amount
0 A 1989 100
1 A 1990 200
2 A 2017 100
现在,假设我在 Univers
列中有数千个项目(以及数据框中相应的temtem),我该如何为 {中的其余项目执行此操作{1}} 使用Univers
(或任何其他)?
答案 0 :(得分:3)
选项1
在groupby
上执行Univers
,因为您需要保存每个组。
for i, g in df.groupby('Univers'):
g.to_csv('{}.csv'.format(i))
这会生成3个文件 -
A.csv
Univers year amount
0 A 1989 100
1 A 1990 200
2 A 2017 100
B.csv
Univers year amount
3 B 1989 500
4 B 1990 200
C.csv
Univers year amount
5 C 1990 200
6 C 19870 400
选项2
另一种选择是调用pd.Series.unique
,然后根据这个条件进行过滤 -
for v in df.Univers.unique():
df[df.Univers == v].to_csv('{}.csv'.format(i))
同样的事情也是如此。您还可以使用query
/ eval
执行过滤。
答案 1 :(得分:0)
这是一种简单的(可能不是优化的)方式:
key_name = 'Univers'
univers = set(d[key_name])
for uni in univers:
print d[d[key_name] == uni]
输出:
Univers year amount
0 A 1989 100
1 A 1990 200
2 A 2017 100
Univers year amount
5 C 1990 200
6 C 19870 400
Univers year amount
3 B 1989 500
4 B 1990 200
答案 2 :(得分:0)
我假设您在另一个数据帧中有“Univer”的可接受值列表,可以说x ...
X Univers Col2
测试1
B test2
C test3
您可以加入两个数据框并过滤掉您需要的行。 大约语法 result = pd.concat([d,x],on ='Univers')..这就是你想要的吗?