[英]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.columns
中for columns in df
而不是for columns in df
中for columns in df
3)您可能想要: if i[0] == row['Lemma']
而不是if i[0]==row:
这是中断的地方
4)您可能想要if column in i
的if 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
dog
栏里绝对不能有cat
,反之亦然。 DataFrame
,我解开list
中lists
到dict
那么加载dict
入DataFrame
,如下图所示。 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
每个值都是Lemma
的key
。 参考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
keys
从list
中lists
: 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
dict
的dicts
: 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.