简体   繁体   English

熊猫:条件基于单元格中的列表

[英]Pandas: Condition based on list in a cell

Dataframe looks like this (blank cells are '', field, extra_dimensions are columns) 数据框看起来像这样(空白单元格是'',字段,extra_dimensions是列)

field | extra_dimensions
------------------------
a     | 
b     | [abc, def]
c     | [ghi]

I have a list of required dimensions and extra dimensions: 我列出了所需的尺寸和其他尺寸:

required_dimensions = [123, 456]
extra_dimensions = [abc, def, ghi]

Desired output: 所需的输出:

field | 123 | 456 | abc | def | ghi
-----------------------------------
a     | 1   | 1   | 0   | 0   | 0
b     | 1   | 1   | 1   | 1   | 0
c     | 1   | 1   | 0   | 0   | 1

Attempt: 尝试:

columns = ['field', 'extra_dimensions'] + required_dimensions + extra_dimensions
df = df.reindex(columns=columns)
for i in required_dimensions:
    df[i].fillna('1', inplace=True)
for i in extra_dimensions:
    df[i][df['extra_dimensions'].str.contains(i)] = '1'

But I get: 但是我得到:

ValueError: cannot index with vector containing NA / NaN values

Would love any input on my attempt or any ideas on a better approach. 希望对我的尝试有任何意见,或者对更好的方法有任何想法。 Thanks in advance! 提前致谢!

By using get_dummies again ..... 通过再次使用get_dummies .....

required_dimensions = ['123', '456']
df=pd.DataFrame({'field':list('abc'),'extra_dimensions':[[],['abc','def'],['ghi']]})
df=pd.get_dummies(df.set_index('field')['extra_dimensions'].apply(pd.Series).stack()).sum(level=0).reindex(df.field).fillna(0)
d = dict.fromkeys(required_dimensions, 1)
df.assign(**d)

Out[283]: 
       abc  def  ghi  123  456
field                         
a      0.0  0.0  0.0    1    1
b      1.0  1.0  0.0    1    1
c      0.0  0.0  1.0    1    1

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

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