在数据框中过滤项目迭代(使用FOR或任何其他)?

时间:2018-01-02 19:26:31

标签: python pandas dataframe filter iteration

我有以下数据框:

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(或任何其他)?

3 个答案:

答案 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')..这就是你想要的吗?