是否可以比较pandas Dataframe中的部分列?我有以下Dataframe示例,其中保存了4种语言(en,de,nl,ua),并且每种语言应该具有相同的键/相同数量的键,但具有不同的值(将静态列保留在那里)完成,因为我有一个静态列,其值始终保持不变).
static │ langs │ keys │ values
x │ en │ key_1 │ value_en_1
x │ en │ key_2 │ value_en_2
x │ en │ key_3 │ value_en_3
x │ de │ key_1 │ value_de_1
x │ de │ key_2 │ value_de_2
x │ de │ key_3 │ value_de_3
x │ nl │ key_1 │ value_nl_1
x │ nl │ key_2 │ value_nl_2
x │ ua │ key_1 │ value_ua_1
我需要检查每种语言的键和缺少的数量与英语(这里的’en’)相比,所以这样的东西将是一个理想的输出:
│ Lang │ Static │ # Missing │ Keys │
│ de │ x │ 0 │ │
│ nl │ x │ 1 │ key_3 │
│ ua │ x │ 2 │ key_2, key_3 │
这是我目前的进展:
import pandas as pd
# this is read from a csv, but I'll leave it as list of lists for simplicity
rows = [
['x', 'en', 'key_1', 'value_en_1'],
['x', 'en', 'key_2', 'value_en_2'],
['x', 'en', 'key_3', 'value_en_3'],
['x', 'de', 'key_1', 'value_de_1'],
['x', 'de', 'key_2', 'value_de_2'],
['x', 'de', 'key_3', 'value_de_3'],
['x', 'nl', 'key_1', 'value_nl_1'],
['x', 'nl', 'key_2', 'value_nl_2'],
['x', 'ua', 'key_1', 'value_en_1']
]
# create DataFrame out of rows of data
df = pd.DataFrame(rows, columns=["static", "language", "keys", "values"])
# print out DataFrame
print("Dataframe: ", df)
# first group by language and the static column
df_grp = df.groupby(["static", "language"])
# try to sum the number of keys and values per each language
df_summ = df_grp.agg(["count"])
# print out the sums
print()
print(df_summ)
# how to compare?
# how to get the keys?
这是df_summ的输出:
keys values
count count
static language
x de 3 3
en 3 3
nl 2 2
ua 1 1
此时我不知道该怎么办.我很感激任何帮助/提示.
附:这是在Python 3.5上.
解决方法:
编辑:
#get set per groups by static and language
a = df.groupby(["static",'language'])['keys'].apply(set).reset_index()
#filter only en language per group by static and create set
b = df[df['language'] == 'en'].groupby("static")['keys'].apply(set)
#subtract mapped set b and join
c = (a['static'].map(b) - a['keys']).str.join(', ').rename('Keys')
#substract lengths
m = (a['static'].map(b).str.len() - a['keys'].str.len()).rename('Missing')
df = pd.concat([a[['static','language']], m, c], axis=1)
print (df)
static language Missing Keys
0 x de 0
1 x en 0
2 x nl 1 key_3
3 x ua 2 key_3, key_2
编辑:
我尝试更改数据:
rows = [
['x', 'en', 'key_1', 'value_en_1'],
['x', 'en', 'key_2', 'value_en_2'],
['x', 'en', 'key_3', 'value_en_3'],
['x', 'de', 'key_1', 'value_de_1'],
['x', 'de', 'key_2', 'value_de_2'],
['x', 'de', 'key_3', 'value_de_3'],
['x', 'nl', 'key_1', 'value_nl_1'],
['x', 'nl', 'key_2', 'value_nl_2'],
['x', 'ua', 'key_1', 'value_en_1'],
['y', 'en', 'key_1', 'value_en_1'],
['y', 'en', 'key_2', 'value_en_2'],
['y', 'de', 'key_4', 'value_en_3'],
['y', 'de', 'key_1', 'value_de_1'],
['y', 'de', 'key_2', 'value_de_2'],
['y', 'de', 'key_3', 'value_de_3'],
['y', 'de', 'key_5', 'value_nl_1'],
['y', 'nl', 'key_2', 'value_nl_2'],
['y', 'ua', 'key_1', 'value_en_1']
]
# create DataFrame out of rows of data
df = pd.DataFrame(rows, columns=["static", "language", "keys", "values"])
# print out DataFrame
#print(df)
输出是:
print (df)
static language Missing Keys
0 x de 0
1 x en 0
2 x nl 1 key_3
3 x ua 2 key_3, key_2
4 y de -3
5 y en 0
6 y nl 1 key_1
7 y ua 1 key_2
问题是de for y static有更多的键,如en语言.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。