[英]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.