我目前正在寻求一种有效的方法将单个pandas DataFrame行拆分为多个略有不同的行。 想象这样的结构:
A C1 C2 C3 C4
1 a b c a
2 b a e b a
3 g c
4 d e
我希望你最终能够得到这样的结构:
:
A C
1 a b
2 a c
3 a a
4 b a
5 b e
6 b b
7 b a
8 g c
9 d e
10 d e
到目前为止,我一直在使用for循环来创建数据字典(df是我的数据框):
rows = []
for i, r in df.iterrows():
tmp = r[1:].dropna()
for c in tmp.values:
dict = {'A': r[0], 'C': c}
rows.append(dict)
很不幸,这种方法非常缓慢。到目前为止,在使用 pandas 时只使用它可以显著提高执行时间,但我没有足够的经验来找出如何使此案例更快。
有人能给些建议吗?可以采取什么措施加速?
C*
列创建了另一种方法:pd.melt(df, id_vars='A', value_vars=list(df.columns[1:]), value_name='C')[['A','C']].dropna()
。我猜这是一种更通用的方法。 - sebap123['C1','A','C2','C3',...]
。 - MaxU - stand with Ukrainelist(df.columns[0]) + list(df.columns[2:])
。 - sebap123C*
列随机分布在它们之间呢? ;) - MaxU - stand with Ukrainefilter()
函数非常灵活,可能非常有用 :) - MaxU - stand with Ukraine