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

Ниже приведен кадр данных, который содержит значения в виде списка.Я хотел бы выполнить две операции.Я хотел бы удалить все строки, содержащие год как ['2017', '2018], и я хотел бы разделить строки [' 2017 '] и [' 2018 '] как отдельные кадры данных.

df4 =pd.DataFrame({ 'Key':['12', '180,146','34', '56', '87'], 'Year':[ ['2017', '2018'],['2017'], ['2018'], ['2017','2018'],['2018']]})

Я не смог найти опцию, которая могла бы выполнить это, когда сами значения находятся внутри списка.Было бы хорошо, если бы я мог сохранить значения в самом списке, так как остальная часть вычислений основана на том, что они таковы.Ценю помощь.

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Вы можете создать маски для каждого из условий:

m_2017_2018 = df4['Year'].apply(lambda x: x == ['2017', '2018'])
m_2017 = df4['Year'].apply(lambda x: x == ['2017'])
m_2018 = df4['Year'].apply(lambda x: x == ['2018'])

И затем создать кадры данных для каждой из масок.

df4 = df4[~m_2017_2018]
df_2017 = df4[m_2017]
df_2018 = df4[m_2018]
0 голосов
/ 02 октября 2018

Я рекомендую вам хранить Year в вашем результате как целые числа.Вот один из способов:

df = df4.loc[df4['Year'].map(len).eq(1)]\
        .assign(Year=np.array(df['Year'].values.tolist()).ravel().astype(int))

dfs = dict(tuple(df.groupby('Year')))

print(dfs)

{2017:        Key  Year
       1  180,146  2017,

 2018:        Key  Year
       2       34  2018
       4       87  2018}
0 голосов
/ 02 октября 2018

Сначала с помощью str.len получите строку, которую вы хотите сохранить

df1=df4[df4.Year.str.len().eq(1)].copy()

Затем, с помощью groupby, разбейте информационный кадр на dict

d={x : y for x , y in df1.groupby(df1.Year.apply(tuple))}
d
Out[680]: 
{('2017',):        Key    Year
 1  180,146  [2017], ('2018',):   Key    Year
 2  34  [2018]
 4  87  [2018]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...