【问题标题】:Concatenating each row values until a NaN value in a python dataframe连接每行值直到python数据框中的NaN值
【发布时间】:2022-01-12 17:55:43
【问题描述】:

我对python很陌生,我正在尝试找到解决以下问题的方法,如果有人知道此查询的解决方案,请提供帮助。

提前致谢!

我想连接每一行值直到一个 nan 值,然后将其存储为新列的相应行值。

以下是支持我的查询的示例: 输入数据框如下:

df = pd.DataFrame({"student_name":['mike','maria','alex','mary','shirin'],"student_id":[1,2,3,4,5], "a1":[70,np.nan,64,78,79],"a2":[65,75,72,np.nan,61],"a3":[82,79,80,99,20],"a4":[90,34,56,89,67],"a5":[78,89,90,90,55],"a6":[55,78,88,77,84]})

我在下面附上了输入数据框的图片:

我的需要是:

  1. 我想连接列 a1...an 的每个对应行值,然后将值存储到标记列。 2)如果该行包含一个 nan 或一个空值,则连接应该在该值处停止。

对于上述输入数据帧,有 a1 到 a6 列,因此所需的输出如下图所示。

【问题讨论】:

  • 您好,欢迎来到 SO。您表明您正在努力解决您的问题,这对社区很重要。在我看来,做到这一点的最好方法是包含您目前拥有的基于 text 的源代码版本,即使它工作不正常。除了错过一些尝试演示之外,您的问题对我来说似乎很好。

标签: python python-3.x pandas dataframe


【解决方案1】:

这是一种适用于 DataFrame 的快速 Python 3 解决方案 (假设使用此代码 sn-p,您的表整体上不会为空)

# ... following your code up to df= padas.DataFrame() line 

tags_ = []
for rowIndex in range(len(df[df.columns[0]])):
    tag_ = ""
    for col in df:
        if col.startswith('a'):
            try: tag_ += str(int(df[col][rowIndex]))
            except: break
    tags_.append(tag_)

df.insert(len(df.columns), "tag_", tags_)

在这里,tags_ 只是一个列表,用于存储每行的字符串连接值,直到遇到 numpy.nan(尽管代码没有专门检查它) 嵌套循环遍历 DataFrame 的每一行和每一列,并且需要非空 DataFrame 列来确保在初始 rowIndex for 循环中识别其中的行。

df.insert(<location>, <column_name>, <values>) 最终插入所需的 tag_ 列作为 DataFrame 的结束列。

希望对您有所帮助!欢迎对它进行任何更正。

【讨论】:

    猜你喜欢
    • 2022-12-05
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2022-12-17
    • 2021-03-09
    • 2015-07-10
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多