Как выбрать конкретную строку, содержащую более одного значения в серии панд? - PullRequest
0 голосов
/ 27 июня 2018

Я создал панд series, применив функцию groupby и value_counts(). Я хочу выбрать строку, которая имеет более одного значения.

Input:
Name                         Value
A                             201         
B                             219
B                             219         
C                             704   
D                             222      
D                             219
ex = ex.groupby("Value")
ex = ex["Name"].value_counts()

Output:
 Value  Name    
  201    A      3
  219    B      2
         D      1
  704    C      1
  222    D      1

Я хочу выбрать value 219 с несколькими Name B и D.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Я думаю, нужно DataFrame.duplicated по обоим столбцам:

df = df[df.duplicated(['Name','Value'], keep=False)]
print (df)
  Name  Value
1    B    219
2    B    219

Но при необходимости вывод подсчитанных значений фильтруется по уровню Value:

s = df.groupby("Value")["Name"].value_counts()
print (s)

df1 = s[s.index.get_level_values('Value').duplicated(keep=False)].reset_index(name='count')
print (df1)
   Value Name  count
0    219    B      2
1    219    D      1

Другое решение - создать DataFrame с помощью reset_index first:

df2 = df.groupby("Value")["Name"].value_counts().reset_index(name='count')
print (df2)
   Value Name  count
0    201    A      1
1    219    B      2
2    219    D      1
3    222    D      1
4    704    C      1

df1 = df2[df2['Value'].duplicated(keep=False)]
print (df1)
   Value Name  count
1    219    B      2
2    219    D      1
0 голосов
/ 27 июня 2018

Нет необходимости в дополнительных groupby.

Вы можете использовать pd.Series.duplicated с вашим оригинальным фреймом данных:

res = df[df['Value'].duplicated(keep=False)]

print(res)

  Name  Value
1    B    219
3    D    219

print(res['Name'].tolist())

['B', 'D']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...