繁体   English   中英

遍历行和列以在Pandas中添加计数

[英]Iterating over Rows and Columns to add counts in Pandas

我正在尝试遍历Pandas中的列和行以交叉引用我拥有的列表并计算共现次数。

我的数据框看起来像:

+-------+-----+-----+----+----+-------+-------+------+
| Lemma | Dog | Cat | Sg | Pl |  Good |  Okay |  Bad |
+-------+-----+-----+----+----+-------+-------+------+
| Dog   |   0 |   0 |  0 |  0 |   0   |   0   |  0   |
| Cat   |   0 |   0 |  0 |  0 |   0   |   0   |  0   |
+-------+-----+-----+----+----+-------+-------+------+

我有一个类似的清单:

c=[[dog, Sg, Good], [cat, Pl, Okay], [dog, Pl, Bad]

我想遍历Lemma每个项目,在c找到它,然后为该列表项目查找任何列名。 如果看到这些列名,我将添加+1。 如果引理项出现在彼此的3个单词窗口中,我还想添加一个计数。

我已经尝试过类似以下操作(忽略单词窗口问题):

for idx, row in df.iterrows():
    for columns in df:
        for i in c:
            if i[0]==row:
                if columns in c[1]:
                    df.ix['columns','row'] +=1

但是我得到了一个错误:“ ValueError:系列的真值不明确。请使用a.empty,a.bool(),a.item(),a.any()或a.all()。”

我的理想结果如下:

+-------+-----+-----+----+----+-------+-------+------+
| Lemma | Dog | Cat | Sg | Pl |  Good |  Okay |  Bad |
+-------+-----+-----+----+----+-------+-------+------+
| Dog   |   1 |   1 |  1 |  1 |   1   |   0   |  1   |
| Cat   |   2 |   0 |  0 |  1 |   0   |   1   |  0   |
+-------+-----+-----+----+----+-------+-------+------+

谢谢!

您有几件事需要更改。

1)您的列表可能需要用Dog代替dog ,用Cat代替cat

2)您可能想要: for column in df.columnsfor columns in df而不是for columns in dffor columns in df

3)您可能想要: if i[0] == row['Lemma']而不是if i[0]==row:这是中断的地方

4)您可能想要if column in iif columns in c[1]而不是if columns in c[1]if columns in c[1]

5)您可能希望df.ix[idx, column] += 1而不是df.ix['columns','row'] +=1

  1. 问题中显示的理想结果不准确。 dog栏里绝对不能有cat ,反之亦然。
  2. 我不会通过重复DataFrame ,我解开listlistsdict那么加载dictDataFrame ,如下图所示。

码:

import pandas as pd

c=[['dog', 'Sg', 'Good'], ['cat', 'Pl', 'Okay'], ['dog', 'Pl', 'Bad'],
   ['dog', 'Sg', 'Good'], ['cat', 'Pl', 'Okay'], ['dog', 'Pl', 'Okay'],
   ['dog', 'Sg', 'Good'], ['cat', 'Sg', 'Good'], ['dog', 'Pl', 'Bad'],
   ['dog', 'Sg', 'Good'],['cat', 'Pl', 'Okay'], ['dog', 'Pl', 'Bad']]

Lemma = {'dog': {'dog': 0, 'Sg': 0, 'Pl': 0, 'Good': 0, 'Okay': 0, 'Bad': 0},
         'cat': {'cat': 0, 'Sg': 0, 'Pl': 0, 'Good': 0, 'Okay': 0, 'Bad': 0}}

注意: c list每个值都是Lemmakey 参考python字典 例如,当x = ['dog', 'Sg', 'Good']Lemma[x[0]][x[2]]Lemma['dog']['Good'] Lemma['dog']['Good']的初始值= 0,因此Lemma['dog']['Good'] = 0 + 1,然后下一次将是1 + 1,依此类推。

for x in c:
    Lemma[x[0]][x[0]] = Lemma[x[0]][x[0]] + 1
    Lemma[x[0]][x[1]] = Lemma[x[0]][x[1]] + 1
    Lemma[x[0]][x[2]] = Lemma[x[0]][x[2]] + 1

df = pd.DataFrame.from_dict(Lemma, orient='index')

输出:

在此处输入图片说明

情节

df.plot(kind='bar', figsize=(6, 6))

在此处输入图片说明

以编程方式创建dict

创建sets的话dict keyslistlists

outer_keys = set()
inner_keys = set()
for x in c:
    outer_keys.add(x[0])  # first word is outer key
    inner_keys |= set(x[1:])  # all other words

创建dictdicts

Lemma = {j: dict.fromkeys(inner_keys | {j}, 0) for j in outer_keys}

最后的dict

{'dog': {'Okay': 0, 'Pl': 0, 'Good': 0, 'Bad': 0, 'Sg': 0, 'dog': 0},
 'cat': {'Okay': 0, 'Pl': 0, 'Good': 0, 'Bad': 0, 'Sg': 0, 'cat': 0}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM