如何在DataFrame上迭代并生成一个新的DataFrame[英] How to iterate over DataFrame and generate a new DataFrame

本文是小编为大家收集整理的关于如何在DataFrame上迭代并生成一个新的DataFrame的处理方法,想解了如何在DataFrame上迭代并生成一个新的DataFrame的问题怎么解决?如何在DataFrame上迭代并生成一个新的DataFrame问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我的数据框如下所示:

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个,我需要两行.

Bellow 是我当前的脚本,它无法生成预期的结果.

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 的多个值到具有重复索引的新数据帧 s.删除不必要的列 L 和 Q.然后将连接输出到原始 df 并删除具有 NaN 值的行.

print df
   P  Q    L
0  1  2    3
1  2  3  NaN
2  4  5  6,7

s = df['L'].str.split(',').apply(pd.Series, 1).stack()
s.index = s.index.droplevel(-1) # to line up with df's index
s.name = 'L'
print s
0    3
2    6
2    7
Name: L, dtype: object

df = df.drop( ['L', 'Q'], axis=1)
df = df.join(s)
print df
   P    L
0  1    3
1  2  NaN
2  4    6
2  4    7
df = df.dropna().reset_index(drop=True)
print df
   P  L
0  1  3
1  4  6
2  4  7

本文地址:https://www.itbaoku.cn/post/1728110.html