聚合值 pandas
Aggregate values pandas
我有一个这样的 pandas 数据框:
Id A B C D
1 a b c d
2 a b d
2 a c d
3 a d
3 a b c
我想通过使用相同 ID 的信息,使用其他行中包含的值来聚合列 B-C 和 D 的空值。
生成的数据框应如下所示:
Id A B C D
1 a b c d
2 a b c d
3 a b c d
对于相同的 ID,第一列 (A) 中可能有不同的值。在这种情况下,我宁愿放置另一个值来指示此事件,而不是放置第一个实例。
例如
Id A B C D
1 a b c d
2 a b d
2 x c d
变成:
Id A B C D
1 a b c d
2 f b c d
IIUC,可以使用groupby_agg
:
>>> df.groupby('Id')
.agg({'A': lambda x: x.iloc[0] if len(x.unique()) == 1 else 'f',
'B': 'first', 'C': 'first', 'D': 'first'})
A B C D
Id
1 a b c d
2 f b c d
我能想到的最好的方法是遍历每个唯一的 Id
,将其从原始数据帧中切出,并构建一个新行作为合并相关行的产物:
def aggregate(df):
ids = df['Id'].unique()
rows = []
for id in ids:
relevant = df[df['Id'] == id]
newrow = {c: "" for c in df.columns}
for _, row in relevant.iterrows():
for col in newrow:
if row[col]:
if len(newrow[col]):
if newrow[col][-1] == row[col]:
continue
newrow[col] += row[col]
rows.append(newrow)
return pd.DataFrame(rows)
我有一个这样的 pandas 数据框:
Id A B C D
1 a b c d
2 a b d
2 a c d
3 a d
3 a b c
我想通过使用相同 ID 的信息,使用其他行中包含的值来聚合列 B-C 和 D 的空值。
生成的数据框应如下所示:
Id A B C D
1 a b c d
2 a b c d
3 a b c d
对于相同的 ID,第一列 (A) 中可能有不同的值。在这种情况下,我宁愿放置另一个值来指示此事件,而不是放置第一个实例。
例如
Id A B C D
1 a b c d
2 a b d
2 x c d
变成:
Id A B C D
1 a b c d
2 f b c d
IIUC,可以使用groupby_agg
:
>>> df.groupby('Id')
.agg({'A': lambda x: x.iloc[0] if len(x.unique()) == 1 else 'f',
'B': 'first', 'C': 'first', 'D': 'first'})
A B C D
Id
1 a b c d
2 f b c d
我能想到的最好的方法是遍历每个唯一的 Id
,将其从原始数据帧中切出,并构建一个新行作为合并相关行的产物:
def aggregate(df):
ids = df['Id'].unique()
rows = []
for id in ids:
relevant = df[df['Id'] == id]
newrow = {c: "" for c in df.columns}
for _, row in relevant.iterrows():
for col in newrow:
if row[col]:
if len(newrow[col]):
if newrow[col][-1] == row[col]:
continue
newrow[col] += row[col]
rows.append(newrow)
return pd.DataFrame(rows)