我有一个像这样的pandas DataFrame
string count values ---- string1 3 vals1 string2 2 vals2
我希望通过重复每一行“count”次来摆脱“count”列,以获得像这样的DataFrame
string1 vals1 string1 vals1 string1 vals1 string2 vals2 string2 vals2
这个操作有一个简单的熊猫配方吗?
尝试:
df.groupby(['string','values']) . apply(lambda x:pd.concat([x] * sum(x ['count']))) . reset_index(drop = True)
假设您想要多个计数行的总和 .
不确定是否有更好的本地方式,但你可以做类似的事情
>>> 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
得到一些东西,然后删除计数和(如果你想) reset_index(drop=True) .
reset_index(drop=True)
我不相信有任何简单的方法可以做到这一点(如在函数中) . 这是一个解决方法,它创建一个嵌套列表,然后用于重新创建扩展数据帧 .
# 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
3 回答
尝试:
df.groupby(['string','values']) . apply(lambda x:pd.concat([x] * sum(x ['count']))) . reset_index(drop = True)
假设您想要多个计数行的总和 .
不确定是否有更好的本地方式,但你可以做类似的事情
得到一些东西,然后删除计数和(如果你想)
reset_index(drop=True)
.我不相信有任何简单的方法可以做到这一点(如在函数中) . 这是一个解决方法,它创建一个嵌套列表,然后用于重新创建扩展数据帧 .