Python 在dataframe列中查找重复值的索引
我有dataframe列的重复值和计数,但我需要在整个列中找到特定重复值的索引查找样本数据帧的索引,因为该索引不是唯一的Python 在dataframe列中查找重复值的索引,python,pandas,dataframe,Python,Pandas,Dataframe,我有dataframe列的重复值和计数,但我需要在整个列中找到特定重复值的索引查找样本数据帧的索引,因为该索引不是唯一的 In[1]: data = [['Center for epidemiological studies depression (CESD)','a'], ['Center for epidemiological studies depression (CESD)','b'], ['Social Causes of Depression','b'], ['Social Caus
In[1]:
data = [['Center for epidemiological studies depression (CESD)','a'], ['Center for epidemiological studies depression (CESD)','b'], ['Social Causes of Depression','b'], ['Social Causes of Depression','b']]
df = pd.DataFrame(data,columns=['Column1','Column2'])
Out[2]:
print (df)
Column1 Column2
0 Center for epidemiological studies depression (CESD) a
0 Social Causes of Depression b
1 Center for epidemiological studies depression (CESD) a
1 Social Causes of Depression b
2 Depressive Realism c
在这里,我获得了列行的重复值,但我还需要特定重复引用的索引,但无法获得
此外,使用groupby
会产生奇怪的结果。这是我想要的东西。看看这些数据,“第0个”索引是第一篇在参考栏中有参考文献的论文我认为,由于索引对于引用列(原始数据帧)不是唯一的,groupby
给出了奇怪的结果。
Expected output:
Column1 index
0 Center for epidemiological studies depression (CESD) [2][3]
1 Social Causes of Depression [1][4]
2 Depressive Realism [5]
似乎您希望在
'Column1'
中找到每个唯一值的位置。执行groupby
时,Pandas会精确跟踪groups
属性中的索引。但是,您需要先重置索引
grp = df.reset_index(drop=True).groupby('Column1')
print(grp.groups)
{
'Center for epidemiological studies depression (CESD)':
Int64Index([0, 2], dtype='int64'),
'Depressive Realism':
Int64Index([4], dtype='int64'),
'Social Causes of Depression':
Int64Index([1, 3], dtype='int64')
}
我会利用这一点,将其放入这样的系列中,以便进行漂亮的打印:
pd.Series(grp.groups)
Center for epidemiological studies depression (CESD) Int64Index([0, 2], dtype='int64')
Depressive Realism Int64Index([4], dtype='int64')
Social Causes of Depression Int64Index([1, 3], dtype='int64')
dtype: object
或者,为了清楚起见,这也适用于:
pd.Series(range(len(df))).groupby(df.Column1.to_numpy()).apply(list)
Center for epidemiological studies depression (CESD) [0, 2]
Depressive Realism [4]
Social Causes of Depression [1, 3]
dtype: object
_______________________________________________________
一个简单的python答案
d = {}
for i, r in enumerate(df.Column1):
d.setdefault(r, []).append(i)
print(d)
{
'Center for epidemiological studies depression (CESD)': [0, 2],
'Social Causes of Depression': [1, 3],
'Depressive Realism': [4]
}
我们可以使用iloc
从'Column1'
df.iloc[d['Center for epidemiological studies depression (CESD)']]
Column1 Column2
0 Center for epidemiological studies depression ... a
1 Center for epidemiological studies depression ... a
似乎您希望在
'Column1'
中找到每个唯一值的位置。执行groupby
时,Pandas会精确跟踪groups
属性中的索引。但是,您需要先重置索引
grp = df.reset_index(drop=True).groupby('Column1')
print(grp.groups)
{
'Center for epidemiological studies depression (CESD)':
Int64Index([0, 2], dtype='int64'),
'Depressive Realism':
Int64Index([4], dtype='int64'),
'Social Causes of Depression':
Int64Index([1, 3], dtype='int64')
}
我会利用这一点,将其放入这样的系列中,以便进行漂亮的打印:
pd.Series(grp.groups)
Center for epidemiological studies depression (CESD) Int64Index([0, 2], dtype='int64')
Depressive Realism Int64Index([4], dtype='int64')
Social Causes of Depression Int64Index([1, 3], dtype='int64')
dtype: object
或者,为了清楚起见,这也适用于:
pd.Series(range(len(df))).groupby(df.Column1.to_numpy()).apply(list)
Center for epidemiological studies depression (CESD) [0, 2]
Depressive Realism [4]
Social Causes of Depression [1, 3]
dtype: object
_______________________________________________________
一个简单的python答案
d = {}
for i, r in enumerate(df.Column1):
d.setdefault(r, []).append(i)
print(d)
{
'Center for epidemiological studies depression (CESD)': [0, 2],
'Social Causes of Depression': [1, 3],
'Depressive Realism': [4]
}
我们可以使用iloc
从'Column1'
df.iloc[d['Center for epidemiological studies depression (CESD)']]
Column1 Column2
0 Center for epidemiological studies depression ... a
1 Center for epidemiological studies depression ... a
如果你和熊猫一起工作,你可以像下面这样做 您可以从这样的数据帧开始:
data = [['Center for epidemiological studies depression (CESD)','a'],
['Center for epidemiological studies depression (CESD)','b'],
['Social Causes of Depression','b'],
['Social Causes of Depression','b'],
['Depressive Realism', 'c']]
df = pd.DataFrame(data,
columns=['Column1','Column2'],
index=[0,0,0,0,0])
您在数据帧上使用了groupby,但之前执行了两次重置索引
第一个将忽略当前索引,第二个将创建一个索引为0、1、2、3、
列索引将包含原始数据帧中行的位置索引
grouped = df.reset_index(drop=True).reset_index()\
.groupby(['Column1'])['index'].apply(list).to_frame('indexes')
输出:
indexes
Column1
Center for epidemiological studies depression (... [0, 1]
Depressive Realism [4]
Social Causes of Depression [2, 3]
Column1 Column2
0 Social Causes of Depression b
0 Social Causes of Depression b
要添加计数,需要计算每行索引的列表长度:
grouped['count'] = grouped['indexes'].map(len)
按“计数”降序排序:
grouped = grouped.sort_values(by=['count'], ascending=False)
如果要查看与抑郁的社会原因相对应的行,可以执行以下操作:
df.iloc[[2, 3]]
输出:
indexes
Column1
Center for epidemiological studies depression (... [0, 1]
Depressive Realism [4]
Social Causes of Depression [2, 3]
Column1 Column2
0 Social Causes of Depression b
0 Social Causes of Depression b
如果你和熊猫一起工作,你可以像下面这样做 您可以从这样的数据帧开始:
data = [['Center for epidemiological studies depression (CESD)','a'],
['Center for epidemiological studies depression (CESD)','b'],
['Social Causes of Depression','b'],
['Social Causes of Depression','b'],
['Depressive Realism', 'c']]
df = pd.DataFrame(data,
columns=['Column1','Column2'],
index=[0,0,0,0,0])
您在数据帧上使用了groupby,但之前执行了两次重置索引
第一个将忽略当前索引,第二个将创建一个索引为0、1、2、3、
列索引将包含原始数据帧中行的位置索引
grouped = df.reset_index(drop=True).reset_index()\
.groupby(['Column1'])['index'].apply(list).to_frame('indexes')
输出:
indexes
Column1
Center for epidemiological studies depression (... [0, 1]
Depressive Realism [4]
Social Causes of Depression [2, 3]
Column1 Column2
0 Social Causes of Depression b
0 Social Causes of Depression b
要添加计数,需要计算每行索引的列表长度:
grouped['count'] = grouped['indexes'].map(len)
按“计数”降序排序:
grouped = grouped.sort_values(by=['count'], ascending=False)
如果要查看与抑郁的社会原因相对应的行,可以执行以下操作:
df.iloc[[2, 3]]
输出:
indexes
Column1
Center for epidemiological studies depression (... [0, 1]
Depressive Realism [4]
Social Causes of Depression [2, 3]
Column1 Column2
0 Social Causes of Depression b
0 Social Causes of Depression b
正如你所描述的那样。返回表示重复行的布尔序列,可以选择只考虑某些列。到目前为止,您尝试了什么?请提供您希望看到的输出。@ALOLZ您看到原始数据帧了吗(问题中给出了链接)?我已经提到索引不是唯一的,因为原始数据中的引用列对于特定的列有许多值。@piRSquared我希望这会有所帮助。但是请查看原始数据框()和所有其他链接。我认为这些链接应该被编辑掉。您在问题中提供了示例数据,由于链接包含不同的数据,我认为它们只会混淆问题。另外,您是否确定预期的输出,我认为您可能交换了一些值?正如你所描述的那样。返回表示重复行的布尔序列,可以选择只考虑某些列。到目前为止,您尝试了什么?请提供您希望看到的输出。@ALOLZ您看到原始数据帧了吗(问题中给出了链接)?我已经提到索引不是唯一的,因为原始数据中的引用列对于特定的列有许多值。@piRSquared我希望这会有所帮助。但是请查看原始数据框()和所有其他链接。我认为这些链接应该被编辑掉。您在问题中提供了示例数据,由于链接包含不同的数据,我认为它们只会混淆问题。另外,您是否确定预期的输出,我认为您可能交换了一些值?按照您的要求编辑了问题,但此anwser不会有帮助,因为groupby不处理非唯一索引。我已更新了答案。刷新页面。我使用
reset\u index
来获得一个唯一的索引。我不知道该怎么做。如果它对您的示例数据有效,但对您的真实数据无效,则表示您的真实数据不够好。是什么让你的真实数据与众不同。按照你的要求编辑了这个问题,但这个anwser没有帮助,因为groupby没有处理非唯一索引。我已经更新了答案。刷新页面。我使用reset\u index
来获得一个唯一的索引。我不知道该怎么做。如果它对您的示例数据有效,但对您的真实数据无效,则表示您的真实数据不够好。是什么让你的真实数据与众不同呢?我在这里详细说明了为什么我会两次重置索引。我在这里详细说明了为什么我会两次重置索引。