Pandas: 如何统计Python中不同列的混合字符大小写值?
Pandas: How to count values of mixed character cases in different columns in Python?
我有一个包含不同列的数据框
COUNTRY
COUNTRY1
COUNTRY2
hp
Italy
uk
france
50
uk
france
italy
150
我想按行计算不同列中的国家(而不使用 melt)来获取和输出如下:
Italy 2
France 2
Uk 2
我尝试了 loc
和 groupby
等不同的选项,但它不起作用。
谢谢
@Henry Yik 的建议效率更高,结合 groupby 可以解决你的问题。
另外,试试这个:
def count_entries(df, col_name):
country_count = {}
# Extract column from DataFrame: col
col = df[col_name]
# Iterate over country column in DataFrame
for entry in col:
# If the country is in langs_count, add 1
if entry in country_count.keys():
country_count[entry] = country_count[entry] + 1
# Else add the language to langs_count, set the value to 1
else:
country_count[entry] = 1
return country_count
print(df.columns)
# Call count_entries(): result
for col_name in df.columns:
result = count_entries(df, col_name)
print(result)
您可以通过 .filter()
, then .stack()
将 COUNTRY*
列过滤为包含国家/地区名称的单个列。
由于您的国名是混合字符大小写,您可以通过str.title()
before we count the occurences with .value_counts()
将国名改为Title case(首字母大写),如下:
df.filter(like='COUNTRY').stack().str.title().value_counts()
结果:
Italy 2
Uk 2
France 2
dtype: int64
我有一个包含不同列的数据框
COUNTRY | COUNTRY1 | COUNTRY2 | hp |
---|---|---|---|
Italy | uk | france | 50 |
uk | france | italy | 150 |
我想按行计算不同列中的国家(而不使用 melt)来获取和输出如下:
Italy 2
France 2
Uk 2
我尝试了 loc
和 groupby
等不同的选项,但它不起作用。
谢谢
@Henry Yik 的建议效率更高,结合 groupby 可以解决你的问题。 另外,试试这个:
def count_entries(df, col_name):
country_count = {}
# Extract column from DataFrame: col
col = df[col_name]
# Iterate over country column in DataFrame
for entry in col:
# If the country is in langs_count, add 1
if entry in country_count.keys():
country_count[entry] = country_count[entry] + 1
# Else add the language to langs_count, set the value to 1
else:
country_count[entry] = 1
return country_count
print(df.columns)
# Call count_entries(): result
for col_name in df.columns:
result = count_entries(df, col_name)
print(result)
您可以通过 .filter()
, then .stack()
将 COUNTRY*
列过滤为包含国家/地区名称的单个列。
由于您的国名是混合字符大小写,您可以通过str.title()
before we count the occurences with .value_counts()
将国名改为Title case(首字母大写),如下:
df.filter(like='COUNTRY').stack().str.title().value_counts()
结果:
Italy 2
Uk 2
France 2
dtype: int64