我有一个像这样的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配方?
答案 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>
假设您想要多个计数行的总和。