如何复制数据并替换一列中的值?

时间:2017-06-26 10:51:25

标签: python pandas

我正在使用这样的数据框:

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

换句话说,我只想在有多个国家/地区时复制行,同时保持其他列中的值相同。

我怎么能用熊猫做到这一点? 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以list使用length,然后DataFrame获取constructor

然后使用str.splitlen 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