我正在使用这样的数据框:
image_data_format='channels_last'
我想复制每个国家/地区的数据(只要有逗号),以便它变为:
samples countries color cost
a US, UK, France, Germany white 1.2
b France, Germany red 2.0
c US blue 2.5
换句话说,我只想在有多个国家/地区时复制行,同时保持其他列中的值相同。
我怎么能用熊猫做到这一点? 谢谢!
答案 0 :(得分:1)
您可以list
使用length
,然后DataFrame
获取constructor
。
然后使用str.split
和len
drop=True
创建新的#columns for repeat
cols = ['samples','color','cost']
splitted = df['countries'].str.split(',')
lens = splitted.str.len()
df = pd.DataFrame({x:np.repeat(df[x], lens) for x in cols}) \
.assign(countries=np.concatenate(splitted)) \
.reindex_axis(df.columns, axis=1) \
.reset_index(drop=True)
print (df)
samples countries color cost
0 a US white 1.2
1 a UK white 1.2
2 a France white 1.2
3 a Germany white 1.2
4 b France red 2.0
5 b Germany red 2.0
6 c US blue 2.5
。列的最后更改顺序为numpy.repeat
,最后按numpy.concatenate
创建了带参数grid.dataSource.group()
的唯一索引:
this.setState({ [name]: value});
答案 1 :(得分:0)
您可以使用链式操作来执行此操作:
首先拆分国家/地区并将它们堆叠到行中,然后将其加入df,删除旧国家/地区列并使用新的国家/地区列。
(
df[df.columns.drop('countries')].join(df.countries.str.split(',')
.apply(pd.Series).stack()
.reset_index(1,drop=True)
.to_frame()
.rename(columns={0:'countries'}))
)
Out[67]:
samples color cost countries
0 a white 1.2 US
0 a white 1.2 UK
0 a white 1.2 France
0 a white 1.2 Germany
1 b red 2.0 France
1 b red 2.0 Germany
2 c blue 2.5 US