通过复制行摆脱“计数”列

时间:2015-12-10 04:39:28

标签: python pandas

我有一个像这样的pandas DataFrame

string count values
----
string1 3 vals1
string2 2 vals2

我希望通过重复每一行“count”次来摆脱“count”列,以获得像这样的DataFrame

string1 vals1
string1 vals1
string1 vals1
string2 vals2
string2 vals2

此操作是否有简单的Pandas配方?

3 个答案:

答案 0 :(得分:1)

我不相信有任何简单的方法可以做到这一点(如在函数中)。这是一个解决方法,它创建一个嵌套列表,然后用于重新创建扩展数据帧。

# Sample data.
df = pd.DataFrame({'string': ['string1', 'string2'], 'count': [3, 2], 'values': ['vals1', 'vals2']})
>>> df
   count   string values
0      3  string1  vals1
1      2  string2  vals2

# Use nested list comprehension to repeat selected columns of each row `count` times.
df2 = pd.DataFrame([[row['string'], row['values']]
                     for _, row in df.iterrows() 
                     for _ in range(row['count'])],
                   columns=['string', 'values'])

>>> df2
    string values
0  string1  vals1
1  string1  vals1
2  string1  vals1
3  string2  vals2
4  string2  vals2

答案 1 :(得分:1)

不确定是否有更好的原生方式,但你可以做类似

的事情
>>> df.iloc[np.repeat(np.arange(len(df)), df["count"])]
    string  count values
0  string1      3  vals1
0  string1      3  vals1
0  string1      3  vals1
1  string2      2  vals2
1  string2      2  vals2

从中获取内容,然后删除count和(如果需要)reset_index(drop=True)

答案 2 :(得分:1)

尝试:

df.groupby(['string','values'])。apply(lambda x:pd.concat([x] * sum(x ['count'])))。reset_index(drop = True)< / p>

假设您想要多个计数行的总和。