我有一个如下所示的数据框:
P Q L
1 2 3
2 3
4 5 6,7
目标是检查L
中是否有值,如果有,提取L
和P
列的值:
P L
1 3
4,6
4,7
注意 L
中可能有多个值,如果超过 1 个值,我需要两行。
下面是我当前的脚本,它无法生成预期的结果。
df2 = []
ego
other
newrow = []
for item in data_DF.iterrows():
if item[1]["L"] is not None:
ego = item[1]['P']
other = item[1]['L']
newrow = ego + other + "\n"
df2.append(newrow)
data_DF2 = pd.DataFrame(df2)
最佳答案
首先,您可以提取 L
和 P
列的所有行,其中 L
没有丢失,如下所示:
df2 = df[~pd.isnull(df.L)].loc[:, ['P', 'L']].set_index('P')
接下来,您可以按如下方式处理剩余的L
行中的多个值:
df2 = df2.L.str.split(',', expand=True).stack()
df2 = df2.reset_index().drop('level_1', axis=1).rename(columns={0: 'L'}).dropna()
df2.L = df2.L.str.strip()
说明:以P
为index
,代码将L
列的string
内容拆分到','
并将各个元素分布在各个列中。然后它将各种新列堆叠成一个新列,并清理结果。
关于python - 如何迭代 DataFrame 并生成新的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34064366/