Python 如果在2个单元格中符合NaN值和小写,则组合多行熊猫

Python 如果在2个单元格中符合NaN值和小写,则组合多行熊猫,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,我的问题是我想把它们做成单行。但是,只有当它在Xlabel中的行下面遇到小写时,它才有条件地使用。另一方面,多行被收缩,使Ylabel仅具有要收缩的NaN值 因此,我有如下数据帧: Xlabel Ylabel 0 Baby doll 240.0 1 Benet doll 30.0 2 lingling NaN 3 Kurachaa NaN 4 mothers NaN 5 day NaN 6 Grape day

我的问题是我想把它们做成单行。但是,只有当它在Xlabel中的行下面遇到小写时,它才有条件地使用。另一方面,多行被收缩,使Ylabel仅具有要收缩的NaN值

因此,我有如下数据帧:

    Xlabel      Ylabel
  0 Baby doll   240.0
  1 Benet doll  30.0
  2 lingling    NaN
  3 Kurachaa    NaN
  4 mothers     NaN
  5 day         NaN
  6 Grape day   100.0
  7 holidays    NaN
  8 Halari doom 90.0
  9 Korsira ja  110.0
 10 Hujarata    940.0
 11 hoom hoom   NaN
 12 laka laka   NaN
 13 cherry      NaN
 
然后变得像

  xlabel                              Ylabel
0 Baby doll                           240.0
1 Benet doll lingling                 30.0
2 Kurachaa mothers day                NaN
3 Grape day holidays                  100.0
4 Halari doom                         90.0
5 Korsira ja                          110.0
6 Hujarata hoom hoom laka laka cherry 940.0
如何实现这一点?

我们可以使用str.contains检查Xlabel列字符串中第一个大写字母的出现情况,然后在此布尔掩码上进行累积和,以识别属于同一句子的连续单词块,最后,对这些块上的数据帧进行分组,并使用join聚合列Xlabel,使用first聚合列Ylabel

我们可以使用str.contains检查列Xlabel字符串中第一个大写字母的出现情况,然后在此布尔掩码上进行累积和,以识别属于同一句子的连续单词块,最后将这些块上的数据帧分组,并使用join和Ylabel first聚合列Xlabel


最直接的方法是使用for循环逐行循环数据帧,以检查Xlabel是否以小写开头。例如:

import pandas as pd
import string
new_df = pd.DataFrame(columns=df.columns)
temp_df = pd.DataFrame(columns=df.columns)
for idx in range(len(df)):
    if df["Xlabel"][idx][0] in string.ascii_uppercase:
        temp_df = df.iloc[idx]
    else:
        # do something
        temp_df["Xlabel"] = temp_df["Xlabel"]+" "+df["Xlabel"][idx]
        new_df = new_df.append(temp_df)

最直接的方法是使用for循环逐行循环数据帧,以检查Xlabel是否以小写开头。例如:

import pandas as pd
import string
new_df = pd.DataFrame(columns=df.columns)
temp_df = pd.DataFrame(columns=df.columns)
for idx in range(len(df)):
    if df["Xlabel"][idx][0] in string.ascii_uppercase:
        temp_df = df.iloc[idx]
    else:
        # do something
        temp_df["Xlabel"] = temp_df["Xlabel"]+" "+df["Xlabel"][idx]
        new_df = new_df.append(temp_df)

无论您从何处读取数据,您是否尝试过以更可用的方式使用数据集。无论您从何处读取数据,您是否尝试过以更可用的方式使用数据集。很好的一个人+1.@ShubhamSharma不应该是。containsr'^[A-Z]'?是的@AnuragDhadse这是一个打字错误。谢谢好男人+1.@ShubhamSharma不应该是。containsr'^[A-Z]'?是的@AnuragDhadse这是一个打字错误。谢谢
import pandas as pd
import string
new_df = pd.DataFrame(columns=df.columns)
temp_df = pd.DataFrame(columns=df.columns)
for idx in range(len(df)):
    if df["Xlabel"][idx][0] in string.ascii_uppercase:
        temp_df = df.iloc[idx]
    else:
        # do something
        temp_df["Xlabel"] = temp_df["Xlabel"]+" "+df["Xlabel"][idx]
        new_df = new_df.append(temp_df)