如果满足 NaN 值并在 2 个单元格中小写,则合并多行熊猫



我的问题是我想把它们做成单行。但是,它只是有条件地在 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,使用firstYlabel

b = df['Xlabel'].str.contains(r'^[A-Z]').cumsum()
df.groupby(b, as_index=False).agg({'Xlabel': ' '.join, 'Ylabel': 'first'})
<小时 />
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

最直接的方法是使用 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)

最新更新