Python 如果在2个单元格中符合NaN值和小写,则组合多行熊猫
我的问题是我想把它们做成单行。但是,只有当它在Xlabel中的行下面遇到小写时,它才有条件地使用。另一方面,多行被收缩,使Ylabel仅具有要收缩的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
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)